【问题标题】:Detect when a OnPropertyChanged occurs检测何时发生 OnPropertyChanged
【发布时间】:2016-11-21 12:01:56
【问题描述】:

这是我需要的一个简化示例:
我有一个具有属性名称的 A 类。 Name 属性是异步更改的,无法知道何时更改。
为了在视图中显示它的更新值,我在其中连接了一个propertychanged 事件并将其与{Binding A.Name} 绑定。在虚拟机中它工作正常。
但就我而言,有很多自定义属性不应该在 A 类中。我在想,一旦在 A 类中引发 propertychangedAViewModel 中的 Name 属性应该得到通知并引发OnPropertyChanged 也是

有什么办法吗?

C#:

public class A : BaseViewModel
{
    string name;
    public string Name
    {
        get { return name; }
        set { Set(()=> Name, ref name, value); }
    }
}

public class AViewModel : BaseViewModel
{
    A a;
    public A A 
    {
        get { return a; }
        set { Set(()=> A, ref a, value); }
    }
    public string Name
    {
        get { return A.Name; }
        set { Set(()=> Name, ref A.Name, value); }
    }
}

XAML:

<TextBox Text="{Binding Name}" />

【问题讨论】:

  • 您是否尝试过在 Name 属性的设置器中使用“RaisePropertyChanged”,然后在绑定到文本框后使用“UpdateSourceTrigger=PropertyChanged”?

标签: wpf xaml mvvm mvvm-light propertychanged


【解决方案1】:

例如,A 类必须有一个经典的 C# 事件,这样 AViewModel 才能订阅它。

【讨论】:

    【解决方案2】:

    尝试将“RaisePropertyChanged”添加到 Name 对象:

       string name;
        public string Name
        {
            get { return name; }
            set { Set(()=> Name, ref name, value); RaisePropertyChanged();}
        }
    

    然后在 Xaml 中包含更新触发器:

    <TextBox Text="{Binding Name}" UpdateSourceTrigger=PropertyChanged />
    

    【讨论】:

      猜你喜欢
      • 2016-12-28
      • 2010-11-14
      • 2020-09-29
      • 2011-03-17
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多