我有一个带有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],我想,我的问题,那么我该如何进行绑定?
提前致谢
答案 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}"/>