2016-03-28 3 views
0

У меня есть 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> 

который связан что-то вроде этого:

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

Где UserSettings выглядит примерно так :

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

Я хочу изменить название TextBlock d быть «Известь», когда UserIsSpeaking - true. Я также хотел бы отключить элементы управления ползунком, когда Audible - false. Каков наилучший способ сделать это? Есть ли простой способ сделать это, используя стили или что-то в XAML?

ответ

1

Вы можете напрямую связать слайдеры и использовать триггер, как показано ниже, чтобы изменить фон TextBlock. Также убедитесь, что коллекция, к которой вы привязаны, должна быть собственностью, а не полем. То же самое с классом UserSettings, выставить свойства не поле и реализовать интерфейс 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 - я знал, что это будет моей следующей проблемой для решения, так что спасибо за то, что вы сохранили мне время на исследования! (Также, derp о привязке IsEnabled.;) Рад, что было просто.) –

Смежные вопросы