如何基于值脏的更新绑定?

时间:2017-08-22 21:43:20

标签: c# wpf xaml propertychanged

我有一个包含5列的DataGrid。前3列是父对象的一部分,后2列是子对象的一部分。 我有一个userName列作为第6列。

当我从父对象的前3列更新任何内容时,userName会正确反映。但是当我从子对象的最后2列更新任何内容时,它不会更新userName。

我已经尝试将它绑定并在子对象中执行逻辑,并且在'save'userName为最后2列正确更新之前,但在保存之后它将恢复为以前的userName。

我的问题是,如何在保存后保留更新的userName?

XAML:

<DataGridTextColumn Header="Updated By" IsReadOnly="True" Binding="{Binding ChildObject.UpdatedUser, UpdateSourceTrigger=PropertyChanged}"/>

子对象:

public string UpdatedUser
{
    get
    {
        var parent = this.CrawlParentFindType<ParentObject>();

        if (Column4IsDirtyByValue || Column5IsDirtyByValue)
            return UpdatedByUserName;

        else return parent.UpdatedByUserName;
    }
}

public bool Column4IsDirtyByValue { get { return FieldManager.IsFieldDirty(Column4Property); } }
public bool Column5IsDirtyByValue{ get { return FieldManager.IsFieldDirty(Column5Property); } }


public string Column4
{
    get { return GetProperty(Column4Property); }
    set { SetProperty(Column4Property, value);  OnPropertyChanged(x => x.UpdatedUser); }
}

public string Column5
{
    get { return GetProperty(Column5Property); }
    set { SetProperty(Column5Property, value); OnPropertyChanged(x => x.UpdatedUser); }
}

1 个答案:

答案 0 :(得分:0)

为什么你的代码如此复杂? 我认为原因在于OnPropertyChanged(x =&gt; x.UpdatedUser); 您调用的UpdateUser属性已更改,但该属性没有任何setter。 下面的代码应该适合你,imho:

private bool _updatedUser;
public bool UpdatedUser
{
    get { return _updatedUser; }
    set { this.SetProperty(ref this._updatedUser, value); }
}

private string _column5;
public string Column5
{
    get { return _column5; }
    set
    {
        this.SetProperty(ref this._column5, value);

        UpdatedUserCheck();
    }
}

private void UpdatedUserCheck()
{
    this.UpdatedUser = // DO YOUR CHECK HERE
}