我正在使用PRISM v2,CAL,SL4和MVVM,并在我的ViewModel上有一个名为CheckCommand的委托命令。 ItemsControl包含一个复选框,我试图获取ItemsControl / Checkbox中的项目,以便在检查时触发此命令 - 但它不会回传给viewmodel!
我认为这是因为每个项目的“datacontext”是项目绑定的单个对象,而不是ViewModel? - 我的怀疑实际上是正确的,因为如果我将我的DelegateCommand移出viewmodel并进入定义itemscontrol中的项目的类,我可以看到命令/方法被触发!
查看:
<ListBox x:Name="BasketListBox" ItemsSource="{Binding BasketCollection}" MinWidth="200">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox commands:Checked.Command="{Binding CheckCommand}" IsChecked="False" </CheckBox>
</DataTemplate>
</ListBox.ItemTemplate>
有人能指出我正确的方向吗?
干杯,麦克德。
编辑1:
命令现在有效,请参阅下面的解决方案。但是,我现在遇到另一个问题:
“创建名为'basketRegion'的区域时发生异常。例外是:System.InvalidOperationException:ItemsControl的ItemsSource属性不为空。此控件与区域关联,但控件已绑定到其他位置。如果您没有显式设置控件的ItemSource属性,这个异常可能是由继承的RegionManager附加属性值的变化引起的“
为此问题创建了单独的问题,使其更加干净:
答案 0 :(得分:1)
您希望每个CheckBox
发出相同的命令吗?你可以:
<CheckBox commands:Checked.Command="{Binding DataContext.CheckCommand, ElementName=BasketListBox}"
或者你可以让每个子视图模型通过它们自己的属性公开命令。
答案 1 :(得分:0)
Thanx Kent。你让我走上正确的道路来解决这个问题,最后这样做了:
<ListBox x:Name="basketListBox" ItemsSource="{Binding basketcollection}" MinWidth="200">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox commands:Checked1.Command="{Binding DataContext.CheckCommand, ElementName=basketListBox}" Content="{Binding basketName}"> </CheckBox>
</DataTemplate>
</ListBox.ItemTemplate>