我在OnPropertyChanged上遇到了一些问题。
在我的观点中,我写道:
<StackPanel>
<Label Content="{Binding TestProperty, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
<Button Content="Click me" Click="Button_Click" />
</StackPanel>
此数据上下文是:
class MainWindowViewModel : PropertyChangedBase
{
public string TestProperty
{
get
{
if (TestWrapperModel.Instance.TestModel == null)
return "Test Initial String";
return TestWrapperModel.Instance.TestModel.TestProperty;
}
}
}
我的TestWrapperModel只是一个实现PropertyChangedBase的简单单例包装器。
我的TestModel就像:
class TestModel : PropertyChangedBase
{
private String _testProperty= "";
public String TestProperty
{
get
{
return _testProperty;
}
set
{
_testProperty= value;
OnPropertyChanged("TestProperty");
}
}
}
PropertyChangedBase是一个实现INotifyPropertyChanged接口的抽象类。
每当我更改TestProperty的值时,OnPropertyChanged都会触发,但UI上的标签不会显示新值(因此它始终显示&#34;测试初始字符串&#34;)。 Snoop说绑定有效。
我认为这是一个简单的问题,我只是看不出问题所在。你有什么想法吗?
答案 0 :(得分:1)
您需要将事件从子视图模型传播到父视图模型。
订阅PropertyChanged
TestModel
事件并在PropertyChanged
课程中再举一个MainWindowViewModel
事件,通知视图TestProperty
属性已更改。
答案 1 :(得分:1)
它不会奏效,因为DataContext
是你的MainWindowViewModel
班级,而不是你的TestModel
班级。当应用程序启动时,它只从TestProperty
获取一次值,如果没有更改,则不会更改标签的值。
您应该在set
上的TestProperty
上写下MainWindowViewModel
来更改您的标签。
答案 2 :(得分:0)
PropertyChanged
事件在模型上触发,但您在viewmodel上绑定 。如果后者没有调用自己的PropertyChanged
事件,绑定引擎就不会知道事情已经发生了变化。