MVVM Light RaisePropertyChanged工作正常

时间:2014-06-14 21:00:44

标签: c# wpf mvvm mvvm-light

在模型中使用它:

 namespace PlanszaGlowna.Model
 {
     public class PlanszaGlowna
     {
         public bool CzyWidoczny { get; set; }

在ViewModel中使用此功能

namespace PlanszaGlowna.WidokModelu
{
    public class PlanszaGlowna : ViewModelBase
    {
        private Model.PlanszaGlowna m_PlanszaGlowna;

        public bool CzyWidoczny
        {
            get { return m_PlanszaGlowna.CzyWidoczny; }
            set
            {
                m_PlanszaGlowna.CzyWidoczny = value;
                RaisePropertyChanged(() => CzyWidoczny);
            }
        }

那个约束力:

         <UserControl x:Class="PlanszaGlowna.Widok.PlanszaGlowna" 
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         Visibility="{Binding Path=CzyWidoczny, Converter={StaticResource Bool2VisibilityKonwerter}, Mode=TwoWay}"

在ViewModel中为CzyWidoczny设置新值时,UI不会更新。我正在使用MVVM Light。

2 个答案:

答案 0 :(得分:0)

问题是模型类PlanszaGlowna.Model.PlanszaGlowna没有实现INotifiyPropertyChanged

所以实现相同并改为

 public class PlanszaGlowna : INotifiyPropertyChanged
 {
    ...
    private _CzyWidoczny;
    public bool CzyWidoczny
    {
        get { return _CzyWidoczny; }
        set
        {
            _CzyWidoczny = value;
            RaisePropertyChanged("CzyWidoczny");
        }
    }
只要您的类PlanszaGlowna.Model.PlanszaGlowna实现了INotifiyPropertyChanged并且您已经创建了包装器方法RaisePropertyChanged来调用PropertyChanged事件

,这将有效。

答案 1 :(得分:0)

如果您尝试使用这样的绑定:

 <UserControl x:Class="PlanszaGlowna.Widok.PlanszaGlowna" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     Visibility="{Binding Path=CzyWidoczny, Converter={StaticResource Bool2VisibilityKonwerter}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

添加UpdateSourceTrigger = PropertyChanged进行绑定。还修改了您的属性已使用下一个结构创建:

private string _text= "";
public string Text
    {
        get { return _text; }
        set { _text= value; RaisePropertyChanged("Text"); }
    }    

如果Text属性属于一个类,它有下一个结构:

public class NewClass: INotifyPropertyChanged
{

    public event PropertyChangedEventHandler PropertyChanged;
    private string _text;
    public string Text
    {
        get { return _text; }
        set
        {
            if ( _text!= value)
            {
                _text= value;
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("Text"));
                }
            }
        }
    } 
}