我有一个通过依赖项属性绑定到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;
}
}
使用适当的IPUpdater模板时,IPTransceiver
绑定到XAML DataTemplate中的TextBox。 IsFinal
绑定到同一模板中的CheckBox。
问题:如何强制文本框注册IPTransceiver
已更改?我曾考虑过尝试将DependencyProperty设置为IPTransceiver,但是如果列表框中有多个该类的实例,我不确定如何初始设置它的值。
TwoWay
和OneWayToSource
绑定模式不适用于只读属性。当CheckBox值更改时,我可以验证IsFinal
是否更新。我什至试图强迫IPTransceiverAddress()
在IsFinal
更新时触发。以上都不是导致TextBox更新的原因。我能够更新框的唯一方法是重复执行SQLite查询,这是我想避免的。
谢谢!
您希望用作绑定源的任何类都应实现INotifyPropertyChanged
。您的ViewModels(以及模型,如果您打算直接将View绑定到它们)也应该实现此接口并引发PropertyChanged
事件,以便WPF绑定引擎在UI中反映这些更改。