silverlight - ItemsControl 中的 MVVM Light 命令

标签 silverlight windows-phone-7 mvvm-light

我只是尝试使用 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/

相关文章:

Silverlight:创建圆形按钮模板

windows-phone-7 - 如何从 Windows Phone 7 应用程序的任何部分获取主页?

wpf - 将 WPF DataGridComboBoxColumn 与 MVVM 结合使用 - 绑定(bind)到 ViewModel 中的属性

wpf - 如何在后台 WPF 进程中呈现 <image>?

c# - 启用应用程序栏时键盘和文本框之间出现奇怪的间隙

silverlight - 在 WP7 上通话时禁用 DispatcherTimer

windows-phone-7 - wp7 PhoneCallTask​​ 结果

c# - 同时进行两个异步调用后的 WCF 问题

c# - WPF 应用程序中的异常记录,MVVMLight SimpleIoC 隐藏异常而不是抛出它们

visual-studio-2010 - MvvmLight工具包安装程序4.0.23.1.msi,未安装VS2010模板