c# - 属性更改未生效,MVVM

标签 c# mvvm windows-phone-8 windows-phone windows-phone-7.1

我有一个像这样的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/

相关文章:

c# - .Net内存可见性行为

c# - 以下代码使用 MVVM 而不是主窗口

c# - LINQ TO 数据集 : Multiple group by on a data table

silverlight - Silverlight查询字符串替代

visual-studio - Windows Phone 部署问题

c# - 如何将多个 Linq 表达式的结果组合成一个表达式?

wpf - 如何使用 MVVM 在 WPF 中绑定(bind)图钉位置?

mvvm - Kendo MVVM 数据绑定(bind)与自定义 Kendo 小部件

c# - 在 Windows Phone 上启动 pdf 文件时出现 System.Runtime.InteropServices.COMException

c# - coding4fun 工具包仅在 xaml 页面中出现错误