1

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

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

我想知道是否有办法检测目标(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 因为我实际上不需要将更改从源传播到目标。

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

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

1 回答 1

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 
}

构造函数设计

于 2012-09-30T20:04:48.267 回答