级联属性已更改



我有一个带有绑定的表单:

<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属性也是从未设置的视图。设置了文本值(即Name(,但即使其后面的视图和类具有Property Updated,SaveButtonEnabled也不会运行。我知道我可能可以,但视图中的属性调用名称,然后更新UserLevel,但这样做似乎违背直觉,肯定有更好的方法。

我似乎想级联PropertyChanged事件。

提前谢谢。

James

文本框中的更改不会触发UserLevel的setter中的OnPropertyChanged,因为UserLevel属性从未更改。TextBox绑定到UserLevel的Name属性,因此只有UserLevel的Name属性的PropertyChanged(如果其实现属性更改(才会被激发。

正如您已经写过的,解决这个问题的一种方法是在视图中添加一个Wrapper属性:

public string Name
{
get{ return UserLevel.Name;}
set{ UserLevel.Name = value;  OnPropertyChanged("SaveButtonEnabled")}

}

并将此属性绑定到TextBox。

第二个选项,也是我认为更好的选项,是使用SaveButton的命令:

https://jigneshon.blogspot.com/2013/11/c-wpf-tutorial-command-bindings-and.html

https://learn.microsoft.com/en-us/dotnet/desktop/wpf/advanced/commanding-overview?view=netframeworkdesktop-4.8

在CanExecute中,您可以返回UserLevel.IsValid((

最新更新