【发布时间】: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 中有多个该类的实例,我不确定如何最初设置它的值。
TwoWay 和 OneWayToSource 绑定模式不适用于只读属性。我可以验证 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