ItemsControl中的MVVM Light命令

Gav*_*inB 2 silverlight windows-phone-7 mvvm-light

我只是在使用MVVM Light框架尝试WP7开发.

我正试图在ItemsControl中触发一个按钮命令,本质上它是一个汽车列表,我希望每个元素都有一个编辑按钮.观点的相关部分:

<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>
Run Code Online (Sandbox Code Playgroud)

我的ViewModel包含:

    public RelayCommand OpenNewForm { get; private set; }

    public CarViewModel()
    {
        //Snip
        EditCar = new RelayCommand<Car>(c =>
        {
            CurrentCar = c;
            FormVisible = true;
        });
    }
Run Code Online (Sandbox Code Playgroud)

现在你可以看到我正在尝试传递通过CommandParameter绑定的当前Car对象.我的代表从不开火,所以我猜我在绑定当前的DataContext时遇到了问题.

有人对我做错了什么有任何想法吗?

LBu*_*ion 7

在DataTemplate中,DataContext默认设置为由DataTemplate表示的项(在这种情况下,Car对象).如果EditCar命令位于主视图模型(也包含MyCars集合)上,则需要显式设置该对象的绑定源.这将是(假设您正在使用MVVM Light的ViewModelLocator并且您的VM名为Main){Binding Source = {StaticResource Locator},Path = Main.EditCar}

干杯,洛朗