WPF:根据绑定值更改ItemsControl中的样式

时间:2016-03-28 03:18:02

标签: c# wpf itemscontrol

我有一个看起来像这样的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;
}

我想在UserIsSpeakingtrue时将Name TextBlock的背景更改为“Lime”。我还想在Audiblefalse时禁用Slider控件。最好的方法是什么?有没有一种简单的方法可以在XAML中使用样式或其他东西?

1 个答案:

答案 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>