如何在ListView中禁用CheckBox

时间:2011-11-29 12:38:06

标签: c# wpf xaml listview wpf-controls

我有一个ListView,其中一列包含复选框

 <ListView Height="164" HorizontalAlignment="Left" ItemsSource="{Binding ProductList}" Name="listView1" VerticalAlignment="Top">
        <ListView.Resources>
            <Style x:Key="DataGridCheckBox" TargetType="{x:Type CheckBox}">
                <Setter Property="FrameworkElement.HorizontalAlignment" Value="Center" />
                <Setter Property="Control.HorizontalContentAlignment" Value="Center" />
                <Setter Property="UIElement.IsEnabled" Value="True" />
                <Setter Property="FrameworkElement.Margin" Value="4" />
                <Setter Property="FrameworkElement.VerticalAlignment" Value="Center" />
                <Setter Property="Control.VerticalContentAlignment" Value="Center" />
            </Style>
        </ListView.Resources>
        <ListView.View>
            <GridView>
                <GridViewColumn Width="40">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox Style="{StaticResource DataGridCheckBox}" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn DisplayMemberBinding="{Binding ProductName}" Header="Product Name" Width="120" />
            </GridView>
        </ListView.View>
    </ListView>

如何禁用代码中的复选框? 是否可以使用以下内容执行此操作:window1.checkBox1.IsEnabled = false;

3 个答案:

答案 0 :(得分:1)

有些方法可以通过代码访问DataTemplate内的控件,但这不是正确的方法或方法。你不应该这样做。您应该使用绑定来禁用或启用ListView

中的复选框

答案 1 :(得分:0)

您可以将CheckBox.IsEnabled绑定到模型类的属性。

的Xaml:

...
<DataTemplate>
     <CheckBox Style="{StaticResource DataGridCheckBox}" IsEnabled="{Binding Path=IsEnabled}"/>
</DataTemplate>
...

代码背后:

//Your object used in List for ListViews ItemsSource
...
public bool IsEnabled{get;set;}
...

答案 2 :(得分:0)

绑定到表示isChecked状态的某个Property(bool):

...
<DataTemplate>
  <CheckBox Style="..." IsChecked="{Binding AmIChecked}" />
</DataTemplate>
...