2016-03-28 75 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;)很高兴这很简单。) –