2016-03-28 31 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的背景當UserIsSpeakingtrue時,d是「石灰」。我還想在Audiblefalse時禁用Slider控件。什麼是最好的方式去做這件事?有沒有一種簡單的方法來使用XAML中的樣式或其他方法來做到這一點?

回答

1

您可以直接綁定滑塊,並使用如下所示的觸發器更改TextBlock的背景。還要確保你綁定的集合應該是屬性而不是字段。如果您想在運行時根據屬性更改更改UI,則與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

Thanks Nitin!感謝INotifyPropertyChanged的領導 - 我知道這將是我下一個要解決的問題,所以感謝您節省了我的研究時間! (另外,關於IsEnabled綁定的derp;)很高興這很簡單。) –