级联 属性 已更改
Cascade Property Changed
我有一个带有绑定的表格:
<TextBox
x:Name="txtGroupName"
Height="23"
Margin="96,13,10,0"
VerticalAlignment="Top"
TabIndex="0"
Text="{Binding UserLevel.Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
TextWrapping="Wrap" />
使用 MVVM 有一个它绑定到的视图,包含以下内容:
public UserLevel UserLevel
{
get { return _userLevel; }
set { _userLevel = value; OnPropertyChanged("UserLevel"); OnPropertyChanged("SaveButtonEnabled"); }
}
public bool SaveButtonEnabled
{
get { return UserLevel.IsValid(); }
}
然而,当文本框值被更新时,即使它绑定到 UserLevel.Name,UserLevel 属性 也永远不会设置视图。文本值已设置(即名称),但即使视图和它后面的 class 已更新 属性,SaveButtonEnabled 也永远不会 运行。我知道我可能可以但是在视图调用名称中使用 属性 然后更新 UserLevel,但这样做似乎违反直觉,肯定有更好的方法。
看来我想级联 属性Changed 事件。
提前致谢。
詹姆斯
文本框中的更改不会触发 UserLevel setter 中的 On属性Changed,因为 UserLevel 属性从未更改过。
TextBox 绑定到 UserLevel 的 Name-属性,因此只有 UserLevel 的 Name 属性 的 属性Changed(如果其实现 属性 更改)将被触发.
如您所写,解决此问题的一种方法是在视图中添加包装器 属性:
public string Name
{
get{ return UserLevel.Name;}
set{ UserLevel.Name = value; OnPropertyChanged("SaveButtonEnabled")}
}
并将此 属性 绑定到文本框。
第二种选择,也是我认为更好的选择,是为保存按钮使用命令:
https://jigneshon.blogspot.com/2013/11/c-wpf-tutorial-command-bindings-and.html
在 CanExecute 中,您可以 return UserLevel.IsValid()
我有一个带有绑定的表格:
<TextBox
x:Name="txtGroupName"
Height="23"
Margin="96,13,10,0"
VerticalAlignment="Top"
TabIndex="0"
Text="{Binding UserLevel.Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
TextWrapping="Wrap" />
使用 MVVM 有一个它绑定到的视图,包含以下内容:
public UserLevel UserLevel
{
get { return _userLevel; }
set { _userLevel = value; OnPropertyChanged("UserLevel"); OnPropertyChanged("SaveButtonEnabled"); }
}
public bool SaveButtonEnabled
{
get { return UserLevel.IsValid(); }
}
然而,当文本框值被更新时,即使它绑定到 UserLevel.Name,UserLevel 属性 也永远不会设置视图。文本值已设置(即名称),但即使视图和它后面的 class 已更新 属性,SaveButtonEnabled 也永远不会 运行。我知道我可能可以但是在视图调用名称中使用 属性 然后更新 UserLevel,但这样做似乎违反直觉,肯定有更好的方法。
看来我想级联 属性Changed 事件。
提前致谢。
詹姆斯
文本框中的更改不会触发 UserLevel setter 中的 On属性Changed,因为 UserLevel 属性从未更改过。 TextBox 绑定到 UserLevel 的 Name-属性,因此只有 UserLevel 的 Name 属性 的 属性Changed(如果其实现 属性 更改)将被触发.
如您所写,解决此问题的一种方法是在视图中添加包装器 属性:
public string Name
{
get{ return UserLevel.Name;}
set{ UserLevel.Name = value; OnPropertyChanged("SaveButtonEnabled")}
}
并将此 属性 绑定到文本框。
第二种选择,也是我认为更好的选择,是为保存按钮使用命令:
https://jigneshon.blogspot.com/2013/11/c-wpf-tutorial-command-bindings-and.html
在 CanExecute 中,您可以 return UserLevel.IsValid()