如何禁用列表框中的复选框wpf

时间:2017-04-04 16:18:17

标签: wpf xaml mvvm

我有一个带有DataTemplate的ListBox,如下所示:

        <ListBox  ItemsSource="{Binding Reportes,Mode=TwoWay}"  >
        <ListBox.ItemTemplate>
            <DataTemplate >
                <StackPanel   IsEnabled="{Binding PantallaActiva}">
                    <CheckBox FontWeight="Bold" HorizontalAlignment="Left" 
                              Content="{Binding NORepo,Mode=TwoWay }" 
                              IsChecked="{Binding Path=EmitirReporte,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
                    <TextBlock FontSize="9" Foreground="Gray" TextWrapping="Wrap" Text="{Binding DSRepo,Mode=TwoWay}" MaxWidth="140"  />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>

    </ListBox>

属性“PantallaActiva”是我的ViewModel中的true / false属性,在某些进程启动时设置为False。我需要在该进程启动时禁用checkBoxes。我的问题是永远不会出现复选框或堆栈面板,看不到PantallaActiva属性或我的viewModel中的任何其他属性,他们只能看到项目集合中的属性Reportes [i],我想,我的问题,那么我该如何进行绑定?

提前致谢

2 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,PantallaActiva属性不属于您的Reporte类(您的集合中的元素)。它可能是您视图模型上的属性,对吧?

您将ItemTemplate的范围绑定到Reporte类型,因为您将该集合绑定为ItemsSource。这就是为什么XAML绑定无法在该类型上找到属性的原因。您需要将IsEnabled属性绑定到ViewModel上的属性。

<CheckBox IsEnabled="{Binding Path=DataContext.PantallaActiva, RelativeSource={RelativeSource AncestorType=MyControlType}}" .../>

为此,您需要将MyControlType设置为可视树的元素,其DataContext绑定到视图模型。 (可能是ListBox的父级)

查看视图模型中的代码会很有帮助。

答案 1 :(得分:0)

替换为此。您只需要将值指定为false,因为默认情况下,它是真的。

IsChecked="{Binding Path=EmitirReporte,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Value=False}"/>