我有一个使用复选框的列表框样式。我想将每个复选框的isEnabled属性绑定到每个项目的属性(ItemEnabled)。这是我的代码:
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="{x:Type ListBoxItem}" >
<Setter Property="Margin" Value="2" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<CheckBox Focusable="False"
IsChecked="{Binding Path=IsSelected, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent} }"
IsEnabled="{Binding Path=ItemEnabled, Mode=OneWay}">
<ContentPresenter></ContentPresenter>
</CheckBox>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
到目前为止,将属性ItemEnabled设置为false的复选框为灰色。但是,仍可单击和可检查/不可检查。 有什么想法吗?
答案 0 :(得分:1)
如果我正确理解了您的问题,则希望控制通过模型控制的复选框“ IsEnabled”,通过列表视图选择的选择控制“ IsChecked”。
您只需为模型创建DataTemplate即可
<DataTemplate DataType="{x:Type local:TestModel}">
<StackPanel Orientation="Horizontal">
<CheckBox IsEnabled="{Binding ItemEnabled}"
IsChecked="{Binding RelativeSource={RelativeSource AncestorType=ListViewItem},Path=IsSelected}"
></CheckBox>
<TextBlock Text="{Binding Name}"></TextBlock>
</StackPanel>
</DataTemplate>
TestModel:
public class Emp
{
public int ID { get; set; }
public string Name { get; set; }
public bool ItemEnabled { get; set; }
}
从代码中删除“ ItemContainerStyle”。
希望这会有所帮助。
答案 1 :(得分:0)
谢谢,RajN。 我根据您的评论设法解决了这个问题。 这是新的XAML:
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="{x:Type ListBoxItem}" >
<Setter Property="Margin" Value="2" />
<Setter Property="Focusable" Value="False" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<ContentPresenter></ContentPresenter>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<CheckBox Focusable="False"
IsChecked="{Binding Path=IsSelected, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=ListBoxItem} }"
IsEnabled="{Binding Path=ItemEnabled, Mode=OneWay}"
Content="{Binding Path=ItemName, Mode=OneWay}">
</CheckBox>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>