【问题标题】:Bind boolean to visualstate将布尔值绑定到视觉状态
【发布时间】:2013-08-30 19:32:14
【问题描述】:

我正在使用表达式混合,当列表框没有元素时,我想将文本框的状态更改为红色边框和红色文本。

所以当文本更改时,我会过滤列表框。

private void OnIPAddressTextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
{
   compositeViewModel.manualServerInfoViewModel.FilterServers(IPAddressTextbox.Text);
}

在我的视图模型中,我过滤结果并检查是否有任何结果。然后我相应地设置布尔属性

public bool HasResults { get; set; }

public void FilterServers(string FilterCriteria)
{
    ....
    HasResults = (FilteredManualServers.Count > 0)? true : false;
}

在我的 xaml 中,当 HasResults 布尔值为 false 时,我尝试将文本框的状态更改为带有红色边框的视觉状态。

<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>

但是当项目数为空且布尔值为 false 时,什么也不会发生。

我做错了什么?

【问题讨论】:

  • 请提供您对 HasResults 属性的实现。它是依赖属性吗?还是从 INotifyPropertyChanged 引发 PropertyChanged 事件?
  • 不,HasResults 只是我的 ViewModel 中的一个公共属性。见编辑

标签: c# wpf


【解决方案1】:

问题在于 UI 不知道 HasResults 的值何时发生变化。绑定中没有轮询机制。您必须通知 UI 有关 HasResults 的更改。你有两种可能。

  1. 当您的视图模型从 DependencyObject 继承时,将 HasResults 属性转换为依赖属性。有关依赖属性的更多信息:

  2. 在视图模型中实现 INotifyPropertyChanged 接口,并在 HasResults 的 setter 中引发 PropertyChanged 事件

【讨论】:

    猜你喜欢
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 2010-12-23
    相关资源
    最近更新 更多