2016-03-28 6 views
0

I持ってこのようなものに見えるのItemsControl:WPF:結合値に基づいてのItemsControl内のスタイルを変更する

<ItemsControl ItemsSource="{Binding}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <TextBlock Text="{Binding Name}" /> 
       <Slider Value="{Binding Volume}" /> 
       <Slider Value="{Binding Pan}" /> 
      </Grid> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

このような何かをバインドされている:UserSettingsは次のようになります

ObservableCollection<UserSettings> connectedUserSettings = new ObservableCollection<UserSettings>(); 
DataContext = connectedUserSettings; 

public class UserSettings 
{ 
    public string Name; 
    public int Volume; 
    public float Pan; 
    public bool Audible; 
    public bool UserIsSpeaking; 
} 

名前TextBlockのバックグラウンドを変更したいUserIsSpeakingtrueの場合、dは "ライム"になります。 Audiblefalseの場合、スライダコントロールを無効にしたいと思います。これについてはどうすればいいですか? XAMLでスタイルや何かを使用してこれを行う簡単な方法はありますか?

答えて

1

スライダーを直接バインドして、以下のようなトリガーを使用してTextBlockの背景を変更することができます。また、バインディングするコレクションがフィールドではなくプロパティであることを確認してください。同じことがUserSettingsクラスであり、性質はフィールドではない公開し、あなたが財産に応じて、実行時にUIを変更したい場合はINotifyPropertyChangedインターフェイスを実装し

<ItemsControl ItemsSource="{Binding}"> 
      <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Grid> 
         <TextBlock x:Name="myTextBlock" Text="{Binding Name}" /> 
         <Slider IsEnabled="{Binding Audible}" Value="{Binding Volume}" /> 
         <Slider IsEnabled="{Binding Audible}" Value="{Binding Pan}" /> 
       </Grid> 
       <DataTemplate.Triggers> 
         <DataTrigger Binding="{Binding UserIsSpeaking}" Value="True"> 
          <Setter TargetName="myTextBlock" Property="Background" Value="Lime"></Setter> 
         </DataTrigger> 
       </DataTemplate.Triggers> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
</ItemsControl> 
+0

おかげニティンを変えます! INotifyPropertyChangedについて頭のおかげで、ありがとう - 私は解決するために私の次の問題になることを知っていたので、私に研究時間を節約してくれてありがとう! (また、IsEnabledバインドについてderp;)嬉しかったのは単純でした。 –

関連する問題