将boolean绑定到visualstate
我正在使用表达式混合,我想在列表框没有元素时将文本框的状态更改为红色边框和红色文本。
因此,当文本更改时,我会过滤列表框。
private void OnIPAddressTextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e) { compositeViewModel.manualServerInfoViewModel.FilterServers(IPAddressTextbox.Text); }
在我的viewmodel中,我过滤结果并检查是否有任何结果。 然后我相应地设置boolean属性
public bool HasResults { get; set; } public void FilterServers(string FilterCriteria) { .... HasResults = (FilteredManualServers.Count > 0)? true : false; }
在我的xaml中,当HasResults布尔值为false时,我尝试将文本框的State更改为带有红色边框的visualstate。
这是NoResult视觉状态
但是当项目数为空且布尔值为假时,没有任何反应。
我究竟做错了什么?
问题是UI不知道HasResults的值何时发生变化。 绑定中没有轮询机制。 您必须通知UI有关HasResults的更改。 你有两种可能性。
-
当视图模型inheritance自DependencyObject时,将HasResults属性转换为依赖项属性。 有关依赖属性的更多信息:
- 这里: http : //msdn.microsoft.com/en-us/library/ms752914.aspx
- 在这里: http : //wpftutorial.net/DependencyProperties.html
-
在视图模型中实现INotifyPropertyChanged接口,并在HasResults的setter中引发PropertyChanged事件
- 更多信息请访问: http : //msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx