如何正确通知数据绑定控件复合 属性 具有新值?
How to properly notify a data bound control that a composite property has new value?
我已将信息标签绑定到视图模型中的 public 属性。 属性 是复合的,即它有多个支持字段。
private String back1;
private String back2;
public String Front { get { return back1 + back2; } }
在此过程中,用户单击了一个按钮,该按钮触发了一个将值设置为 Something 的事件。那部分工作得很好。所以我也对其中的两个支持字段进行了赋值,如下所示。
public Thing Something
{
...
set
{
...
back1 = getBack1();
back2 = getBack2();
OnPropertyChanged();
}
}
问题是数据绑定到 Front 的标签没有改变。我需要告诉系统它脏了需要刷新。但是,由于我没有为支持字段使用任何属性(因此,属性 Front 永远不会 set,只是呈现),我无法使用 OnPropertyChanged 方法。
这是一个糟糕的设计吗?我应该为此使用两个不同的属性吗?绑定两个 总是 会产生共同输出的东西似乎很浪费。我还能怎么做?
您需要将 属性 名称传递给该方法:
OnPropertyChanged("Front");
检查这个Link
绑定通过根据 属性 名称 侦听 PropertyChanged
来工作。所以你需要通知 属性 你想要 UI 到 "get"。所以该方法需要调用两次。每 属性 通知一次需要更新。 setter里面应该有下面的
OnPropertyChanged("Front");
OnPropertyChanged("Something");
第二次调用,如果从 Something 的 属性 的 setter 范围执行,则可以作为该方法的标准版本无参数在 .NET 4.5 中使用 [CallerMemberName]
属性,它允许您执行:
OnPropertyChanged();
从 属性 的 setter 没有 指定名称。请注意,编译器只是将调用的名称 属性 放在那里,它仍然存在 。没有 属性 名字就没有有效的 PropertyChanged
加注。
我已将信息标签绑定到视图模型中的 public 属性。 属性 是复合的,即它有多个支持字段。
private String back1;
private String back2;
public String Front { get { return back1 + back2; } }
在此过程中,用户单击了一个按钮,该按钮触发了一个将值设置为 Something 的事件。那部分工作得很好。所以我也对其中的两个支持字段进行了赋值,如下所示。
public Thing Something
{
...
set
{
...
back1 = getBack1();
back2 = getBack2();
OnPropertyChanged();
}
}
问题是数据绑定到 Front 的标签没有改变。我需要告诉系统它脏了需要刷新。但是,由于我没有为支持字段使用任何属性(因此,属性 Front 永远不会 set,只是呈现),我无法使用 OnPropertyChanged 方法。
这是一个糟糕的设计吗?我应该为此使用两个不同的属性吗?绑定两个 总是 会产生共同输出的东西似乎很浪费。我还能怎么做?
您需要将 属性 名称传递给该方法:
OnPropertyChanged("Front");
检查这个Link
绑定通过根据 属性 名称 侦听 PropertyChanged
来工作。所以你需要通知 属性 你想要 UI 到 "get"。所以该方法需要调用两次。每 属性 通知一次需要更新。 setter里面应该有下面的
OnPropertyChanged("Front");
OnPropertyChanged("Something");
第二次调用,如果从 Something 的 属性 的 setter 范围执行,则可以作为该方法的标准版本无参数在 .NET 4.5 中使用 [CallerMemberName]
属性,它允许您执行:
OnPropertyChanged();
从 属性 的 setter 没有 指定名称。请注意,编译器只是将调用的名称 属性 放在那里,它仍然存在 。没有 属性 名字就没有有效的 PropertyChanged
加注。