我有一个像这样的ViewModel:
public class ColorViewModel : INotifyPropertyChanged
{
private SolidColorBrush colorBrush;
public SolidColorBrush ColorBrush
{
get
{
return colorBrush;
}
set
{
if (value != colorBrush)
{
colorBrush = value;
NotifyPropertyChanged("ColorBrush");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (null != handler)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
在
MainViewModel
内部,我已经定义了它:public ColorViewModel AppColor { get; set; }
并在整个应用程序中使用了它:
<Grid x:Name="LayoutRoot" Loaded="LayoutRoot_Loaded">
<StackPanel Background="{Binding AppColor.ColorBrush}" Height="240">
</StackPanel>
</Grid>
它工作正常。但是问题是:当我尝试更改该值时,它没有出现,并且正在使用它的元素仍然显示旧值。怎么了?
App.ViewModel.AppColor = newColor;
最佳答案
因为您将AppColor定义为
public ColorViewModel AppColor { get; set; }
当您为AppColor赋予新值时,不会通知任何人。使MainViewModel还实现INotifyPropertyChanged并将AppColor声明更改为
private ColorViewModel appColor;
public ColorViewModel AppColor
{
get
{
return appColor;
}
set
{
if (value != appColor)
{
appColor= value;
NotifyPropertyChanged("AppColor");
}
}
}
关于c# - 属性更改未生效,MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20763658/