在TwoWay绑定中通知目标更改的来源

时间:2012-09-30 16:13:53

标签: c# .net xaml binding microsoft-metro

我正在构建一个Windows应用商店应用,我有一个TextBox绑定(双向模式)到我的TaskItem对象的字符串“title”属性。

我需要在对此TextBox进行更改之后对进行一些处理并传播回源。

我想知道是否有办法检测目标(TextBox的Text属性)何时发生了变化。我知道我可以通过处理TextBox的LostFocus事件来捕获此事件,但是在更新源之前触发此事件

更新

结合:

<ScrollViewer
            x:Name="itemDetail"
            DataContext="{Binding SelectedItem, ElementName=itemListView}">
    <TextBox x:Name="itemTitle" Text="{Binding Title, Mode=TwoWay}"/>
</ScrollViewer>

类和属性:

class TaskItem
{
    public string Title { get; set; }
}

我没有实现INotifyPropertyChanged,因为我实际上不需要将更改从源传播到目标。

我可以想到两个解决方案:

  • 有没有办法在属性的setter上使用[CallerMemberName]?如果有,我可能能够确定“标题”是由我自己的代码更改还是由于绑定。
  • 抛弃双向绑定并在LostFocus事件期间手动更新源。

1 个答案:

答案 0 :(得分:1)

class TaskItem, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    internal void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }

    private string title;
    public string Title 
    { 
       get { return title; } 
       set 
       { 
           if (title == value) return;
           title = value;
           NotifyPropertyChanged("Title");
       }
    }
    public TaskItem (string -title) 
    { title = _title; }  
    // does not fire setter title lower case 
    // but the UI will have this value as ctor fires before render 
    // so get will reference the assigned value of title 
}

Constructor Design