【问题标题】:property changes doesn't take effect, MVVM属性更改不生效,MVVM
【发布时间】:2013-12-24 16:03:34
【问题描述】:

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

【问题讨论】:

  • 您能否发布定义该元素的 XAML 的其余部分,直到其根元素
  • 完全显示 Binding XAML。你是如何设置 newColor 值的?
  • @bas @Gokul 我已经更新了。 newColorColorViewModel 类型的新值,我将其设置在其中一个页面内。
  • 我认为问题在于MainViewModel 中的定义。当它是一个集合时,我使用ObservableCollection 所以它会捕捉到新的变化,但在这里我认为它不能知道新的变化,对吗?

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


【解决方案1】:

因为您将 AppColor 定义为

public ColorViewModel AppColor { get; set; }

当您为 AppColor 分配新值时,notbody 会收到通知。使 MainViewModel 也实现 INotifyPropertyChanged 并将 AppColor 声明更改为

private ColorViewModel appColor;

public ColorViewModel AppColor
{
    get
    {
        return appColor;
    }
    set
    {
        if (value != appColor)
        {
            appColor= value;
            NotifyPropertyChanged("AppColor");
        }
    }
}

【讨论】:

    猜你喜欢
    • 2013-12-02
    • 2011-12-10
    • 2016-03-28
    • 2014-05-15
    • 1970-01-01
    • 2011-06-30
    • 2013-10-21
    • 2015-10-29
    • 1970-01-01
    相关资源
    最近更新 更多