我有一个看起来像这样的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;
}
我想在UserIsSpeaking
为true
时将Name TextBlock的背景更改为“Lime”。我还想在Audible
为false
时禁用Slider控件。最好的方法是什么?有没有一种简单的方法可以在XAML中使用样式或其他东西?
答案 0 :(得分:1)
您可以直接绑定滑块并使用下面的Trigger更改TextBlock的背景。还要确保您绑定的Collection应该是property而不是field。与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>