【问题标题】:Binding Update of a Read-Only Property in DataTemplateDataTemplate 中只读属性的绑定更新
【发布时间】:2013-01-14 15:00:48
【问题描述】:

我有一个通过依赖属性绑定到ObservableCollection<object> 的ListBox。我正在使用DataTemplateSelector 来确定在 ObservableCollection 中找到的基于类类型的对象类型,然后我应用适当的 DataTemplate。任何类类型的多个对象都是可能的。

我的模型类的一部分如下。它已被编辑为仅显示兴趣点:

public class IPUpdater
{
   public IPUpdater()
   {
   }

   public string IPTransceiverInstall { get; set; }
   public string IPTransceiverFinal { get; set; }
   public Boolean IsFinal { get; set; }       

   public string IPTransceiver
   {
       get
       {
           return IPTransceiverAddress();
       }
   }

   private string IPTransceiverAddress()
   {
       if (!IsFinal)
           return IPTransceiverInstall;
       else
           return IPTransceiverFinal;
   }

}

IPTransceiver 在使用适当的 IPUpdater 模板时绑定到 XAML DataTemplate 中的 TextBox。 IsFinal 绑定到同一模板中的 CheckBox。

问题:如何强制 TextBox 注册 IPTransceiver 已更改?我曾想过尝试将 DependencyProperty 设置为等于 IPTransceiver,但如果 Listbox 中有多个该类的实例,我不确定如何最初设置它的值。

TwoWayOneWayToSource 绑定模式不适用于只读属性。我可以验证 IsFinal 在 CheckBox 值更改时更新。我什至试图强制IPTransceiverAddress()IsFinal 更新时触发。以上都没有导致 TextBox 更新。我能够让框更新的唯一方法是重复 SQLite 查询,我想避免这种情况。

谢谢!

【问题讨论】:

  • 首先,您没有实现INotifyPropertyChanged,因此UI 无法知道何时发生更改。二、只读属性如何改变??
  • 我使用依赖属性而不是INotifyPropertyChanged。该属性在类外部是只读的。那有意义吗?我不希望将属性设置在类外部。
  • I'm using dependency properties instead of INotifyPropertyChanged.That's wrong。另外,我根本看不到您的代码正在执行 DependencyProperties。请说清楚。此外,如果您的属性在类外是只读的,请改为创建 private setter
  • 糟糕!抱歉重复的评论。 SO在提交时给了我一个错误,所以我重试了几次=(
  • 为什么错了?我认为使用 DependencyProperties 与 INotifyPropertyChanged 是一个偏好问题?但是,在这一点上,由于投入的时间,我打算坚持使用 DP。不过要澄清一下,我在 VM 中有 DP,而不是在模型中。将它们放入模型中是否合适?

标签: c# xaml data-binding dependency-properties


【解决方案1】:

您希望用作绑定源的任何类都应实现INotifyPropertyChanged。您的 ViewModel(以及您的模型,如果您打算将 View 直接绑定到它们)应该实现此接口并引发 PropertyChanged 事件,以便 WPF 绑定引擎在 UI 中反映这些更改。

【讨论】:

  • 我可以让它工作的唯一方法是将OnPropertyChanged("IPEthernet")OnPropertyChanged("IPEthernet")添加到IsFinal setter。
  • 是的...我相对较新,而且在这一切方面都落后于曲线!
猜你喜欢
  • 1970-01-01
  • 2015-09-09
  • 2014-04-16
  • 2013-01-01
  • 2018-09-30
  • 2020-04-25
  • 2010-10-14
  • 2011-10-15
  • 1970-01-01
相关资源
最近更新 更多