我只是尝试使用 MVVM Light 框架进行 WP7 开发。
我试图在 ItemsControl 中触发一个按钮命令,本质上它是一个汽车列表,我希望每个元素都有一个编辑按钮。 View 的相关部分:
<ItemsControl ItemsSource="{Binding MyCars}" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid x:Name="CarViewGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" MinWidth="100" />
<ColumnDefinition Width="Auto" MinWidth="302"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" MinHeight="40" />
<RowDefinition Height="Auto" MinHeight="32" />
<RowDefinition Height="Auto" MinHeight="32" />
<RowDefinition Height="Auto" MinHeight="32" />
</Grid.RowDefinitions>
<TextBlock x:Name="CarName" Text="{Binding Name, Mode=TwoWay}" Margin="7,0" Grid.Row="0" Grid.ColumnSpan="2" FontSize="32" FontWeight="Bold" FontStyle="Normal" />
<TextBlock x:Name="Make" Text="{Binding Make, Mode=TwoWay}" Margin="15,0" Grid.Row="1" Grid.Column="0" FontSize="24" />
<TextBlock x:Name="Model" Text="{Binding Model, Mode=TwoWay}" Grid.Row="1" Grid.Column="1" FontSize="24" />
<TextBlock x:Name="Odometer" Text="{Binding Odometer, Mode=TwoWay}" Margin="15,0" Grid.Row="2" Grid.ColumnSpan="2" FontSize="24" />
<Button x:Name="EditCarButton" Content="Edit" Grid.Row="3" Grid.Column="1" HorizontalAlignment="Right" Width="100" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cmd:EventToCommand Command="{Binding EditCar}" CommandParameter="{Binding}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
我的 ViewModel 包含这个:
public RelayCommand OpenNewForm { get; private set; }
public CarViewModel()
{
//Snip
EditCar = new RelayCommand<Car>(c =>
{
CurrentCar = c;
FormVisible = true;
});
}
现在如您所见,我正在尝试传递通过 CommandParameter 绑定(bind)的当前 Car 对象。我的委托(delegate)从不触发,所以我猜我在绑定(bind)当前 DataContext 时出了点问题。
有人知道我做错了什么吗?
最佳答案
在 DataTemplate 中,DataContext 默认设置为由 DataTemplate 表示的项(在这种情况下为 Car 对象)。如果 EditCar 命令位于主视图模型(也包含 MyCars 集合)上,则需要将绑定(bind)的源显式设置为该对象。这将是(假设您正在使用 MVVM Light 的 ViewModelLocator 并且您的 VM 被命名为 Main){Binding Source={StaticResource Locator}, Path=Main.EditCar}
干杯, 洛朗
关于silverlight - ItemsControl 中的 MVVM Light 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6085846/