当我有2个UI控件绑定到同一个属性时,我如何只更新我想要的UI?

时间:2014-05-12 11:09:08

标签: wpf binding inotifypropertychanged

对于exmaple,我有2个TextBlock UI。

下面的当前代码是两个窗口都会得到名称 每当调用INotifyPropertyChanged时。

例如,I window 2将更新名称但是 调用INotifyPropertyChanged时,我不希望窗口1更新。

窗口1

<TextBlock Text="{binding Name}"/>

窗口2

<TextBlock Text="{binding Name}"/>

查看模型

class UserViewModel : INotifyPropertyChanged
{
        public event PropertyChangedEventHandler PropertyChanged;

        public void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }


        private string m_Name = "John";

        public string Name 
        {
            get { return m_Name; }
            set 
            {
                if (value != Name)
                {
                    m_Name = value;
                    OnPropertyChanged("Name");
                }
            }
        }


}

2 个答案:

答案 0 :(得分:1)

将绑定模式的一次性设置添加到您不想更新的设置。

{Binding Name, Mode=OneTime}

答案 1 :(得分:0)

您无法在特定时间停止由INotifyPropertyChanged界面更新UI控件。但是,您只需添加另一个属性即可绑定到Window 1,并从原始属性中获取此值。然后,您可以添加bool属性,以启用或禁用新属性的更新。尝试这样的事情:

public string SecondNameProperty
{
    get 
    {
        if (CanUpdate) secondNameProperty = Name;
        return secondNameProperty;
    }
}

如果要更新SecondNameProperty属性,只需确保CanUpdate属性设置为true,当您不希望更新时,请将其设置为{ {1}}。