【发布时间】:2018-03-04 15:53:06
【问题描述】:
我想不通。我以为我正确设置了绑定,但它没有触发。所以我有一个看法:
<ListBox x:Name="EquipmentViewsListBox"
ItemsSource="{Binding EquipmentViews, UpdateSourceTrigger=PropertyChanged}"
SelectionMode="Extended"
BorderThickness="0"
Height="150"
Margin="5,5,10,10">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox}, Path=DataContext.ViewSelected}"
CommandParameter="{Binding RelativeSource={RelativeSource Self}}"
Content="{Binding Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
每次选中ListBox 中的复选框时,我都想触发一个命令。我在我的视图模型上创建了一个命令,如下所示:
public class SdddViewModel : ViewModelBase
{
public SdddModel Model { get; set; }
public RelayCommand<ViewWrapper> ViewSelected { get; set; }
public SdddViewModel(SdddModel model)
{
Model = model;
ViewSelected = new RelayCommand<ViewWrapper>(OnViewSelected);
}
private void OnViewSelected(ViewWrapper obj)
{
var asd = obj;
}
}
所以我明白,当我执行ListBox.ItemTemplate 时,该项目的上下文变成了ListBoxItem,所以在我的例子中是一个类对象ViewWrapper。这适用于内容的Name 绑定以及IsSelected 属性。这是检查项目时未触发的命令。我将相对祖先设置为ListBox 和Path=DataContext,但仍然没有任何反应。想法?
【问题讨论】:
标签: c# wpf xaml mvvm mvvm-light