none
如何区分绑定源变化引起的更改和用户引起的更改? RRS feed

  • 问题

  • 我有一个类Settings,有好几个属性: string Name, int TimeLimit等等。

    我建了一个DataTemplate用来显示Settings:

    <DataTemplate x:Key="SettingsTemplate">
        <StackPanel>
            <TextBox  Text="{Binding Name}"  VerticalAlignment="Center" TextChanged="SettingChangedEventHandler"/>
            <ComboBox SelectedValue="{Binding TimeLimit}" SelectionChanged="SettingChangedEventHandler"/>
        </StackPanel>
    </DataTemplate>

    然后一个ContentPresenter用这个模板来显示Settings。

    这两个控件的“变化"事件(TextChanged和SelectionChanged)都注册给了SettingChangedEventHandler,使得用户对任一控件执行修改,程序可以得到通知并执行操作X。

    但是我有时需要设置contentPresenter.Content=new Setting();这时候TextChanged往往也会被引发,于是操作X也执行了,这不是我所期望的。

    我想要在用户修改时,才执行操作X;Content赋新值时不执行X。

    另外,SettingsTemplate里不只是TextBoxh和ComboBox,可能还会加上CheckBox或者什么别的。

    请问怎么区别绑定源变化引起的更改和用户引起的更改?

    我怀疑我这里有好几个不同类型的控件,会不会各自区分的方法也有差别,还是弄个属性来通知会简单一点?比如

    IsChangingContent=True;
    contentPresenter.Content=new Setting();
    IsChangingContent=False;




    2012年7月19日 5:30

答案

全部回复