[英]Bind boolean to 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时,我尝试使用红色边框将文本框的状态更改为visualstate。
<TextBox x:Name="IPAddressTextbox" Height="27.24" Margin="-92.799,8,0,0" VerticalAlignment="Top" Width="209" Background="#FFF3F3F3" BorderBrush="#FF2F2F2F" TextChanged="OnIPAddressTextChanged" >
<i:Interaction.Behaviors>
<ei:DataStateBehavior Binding="{Binding HasResults}" TrueState="NoResults" />
</i:Interaction.Behaviors>
</TextBox>
这是NoResult视觉状态
<VisualStateGroup x:Name="Filtering">
<VisualState x:Name="NoResults">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" Storyboard.TargetName="IPAddressTextbox">
<EasingColorKeyFrame KeyTime="0" Value="Red"/>
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)" Storyboard.TargetName="IPAddressTextbox">
<EasingColorKeyFrame KeyTime="0" Value="#FFCE1010"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
但是当项目数为空且布尔值为假时,没有任何反应。
我究竟做错了什么?
问题是UI不知道HasResults的值何时发生变化。 绑定中没有轮询机制。 您必须通知UI有关HasResults的更改。 你有两种可能性。
当视图模型从DependencyObject继承时,将HasResults属性转换为依赖项属性。 有关依赖属性的更多信息:
在视图模型中实现INotifyPropertyChanged接口,并在HasResults的setter中引发PropertyChanged事件
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.