2013-08-30 42 views
3

我正在使用表達式混合,並且當列表框沒有元素時,我想將文本框的狀態更改爲紅色邊框和紅色文本。將布爾值綁定到visualstate

因此,當文本更改我篩選列表框。

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

在我的viewmodel我篩選結果,並檢查是否有任何結果。然後,我因此

public bool HasResults { get; set; } 

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

在我的XAML中設置的布爾屬性我嘗試在HasResults布爾是假的文本框來改變國家的的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的visualSTATE

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

但是,當項目的數量是空的,布爾是假的,沒有任何反應。

我在做什麼錯?

+0

請提供您的HasResults屬性的實現。它是一個依賴屬性?或者它從INotifyPropertyChanged引發PropertyChanged事件? –

+0

不,HasResults只是我ViewModel中的一個公共屬性。請參閱編輯 –

回答

2

問題是UI不知道HasResults的值何時更改。綁定中沒有輪詢機制。您必須通知UI有關HasResults的更改。你有兩種可能性。

  1. 的HasResults屬性轉換到依賴屬性時,您的視圖模型自DependencyObject繼承。有關依賴屬性的更多信息:

  2. 在您的視圖模型實現INotifyPropertyChanged接口和HasResults的二傳手提高PropertyChanged事件

相關問題