在setter中更改属性值时更新View

时间:2016-03-29 17:26:36

标签: c# wpf mvvm

我的视图中有一个复选框,它已绑定到viewmodel中的属性。当我选中/取消选中该复选框时,属性的setter中有一个条件,如果条件为真,则更新相同的属性。但是当属性更新时,相应的视图不会改变。

这是代码: 视图:

<CheckBox IsChecked="{Binding HoldingPen,Mode="Twoway" ,UpdateSourceTrigger=PropertyChanged}"/>

视图模型:

public bool HoldingPen
{
  get{m_holdingPen;}
  set
  {
    m_hodingPen=value;
    onPropertyChanged("HoldingPen");
    OnHoldingPenCheckChanged();
  }

public void OnHoldingPenCheckChanged()
{
  if(HoldingPen && some other condition)
  {
    HoldingPen=false;  //Here view should be updated simultaneously 
  }
}

1 个答案:

答案 0 :(得分:1)

我认为这是因为有两个onPropertyChanged个事件触发,一个值为true,另一个值为false

通常对于这种逻辑,我更喜欢使用PropertyChanged事件而不是在属性设置器中隐藏逻辑。

public class MyClass()
{
    public MyClass()
    {
        // attach property changed in constructor
        this.PropertyChanged += MyClass_PropertyChanged;
    }

    private void MyClass_PropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        if (e.PropertyName == "HoldingPen")
            OnHoldingPenCheckChanged();
    }

    public bool HoldingPen
    {
        get{ m_holdingPen; }
        set
        {
            if (m_hodingPen == value)
                return; 

            m_hodingPen=value;
            onPropertyChanged("HoldingPen");
        }
    }

    public void OnHoldingPenCheckChanged()
    {
        if(HoldingPen && some other condition)
        {
            HoldingPen=false;  //Here view should be updated simultaneously 
        }
    }
}

这样做的另一个好处是可以使用任何自定义代码来修改一个位置的值,而不是在查找内容时浏览每个setter。