Windows phone 7 绑定到Windows Phone 7项数据模板内的MVVM灯光中继命令
我正在尝试使用MVVM Light命令将按钮绑定到viewmodel命令,由于某些原因,该命令似乎没有被调用。通常我在使用命令时不会遇到任何问题,但是这个似乎忽略了绑定 这是我的密码:Windows phone 7 绑定到Windows Phone 7项数据模板内的MVVM灯光中继命令,windows-phone-7,mvvm-light,Windows Phone 7,Mvvm Light,我正在尝试使用MVVM Light命令将按钮绑定到viewmodel命令,由于某些原因,该命令似乎没有被调用。通常我在使用命令时不会遇到任何问题,但是这个似乎忽略了绑定 这是我的密码: <ListBox.ItemTemplate> <DataTemplate> <StackPanel> <Button> <Interactivity:Interaction.Tri
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<Button>
<Interactivity:Interaction.Triggers>
<Interactivity:EventTrigger EventName="Click">
<Command:EventToCommand
Command="{Binding MyButtonClickAction}" />
</Interactivity:EventTrigger>
</Interactivity:Interaction.Triggers>
</Button>
<StackPanel>
<TextBlock Text="{Binding MyProperty}"/>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding MyOtherProperty}" />
</StackPanel>
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
这个数据模板在我的应用程序启动后创建的列表中,我想知道这是否是问题所在。我的理论是创建视图模型,构造函数尝试使用relay命令设置绑定,但是由于列表中还没有任何项,绑定以某种方式失败
MyProperty和MyOtherProperty的绑定工作正常
有没有关于如何使其工作的建议?问题在于,在DataTemplate中,DataContext是项本身,而不是ViewModel。因此,当您说
{Binding MyButtonActionClick}
时,绑定是在项上查找名为MyButtonActionClick
的命令,我猜它只是一个简单的对象,没有自己的命令属性
有几种方法可以解决这个问题。由于您已经在使用MMVM Light,最好的方法可能是将集合定义为List
,而不是List
,并将项目包装在自己的ViewModel类中。然后,您可以向该视图模型添加MyButtonActionClick
命令,并回调父视图模型
否则,请更改命令绑定,使其查看ItemsControl本身的DataContext。看一下(当然是公认的答案)关于如何做到这一点的想法。
作为一个旁注,您可能需要考虑在使用命令与按钮关联时使用ButnBaseExp展类。此类可以在GalaSoft.MvvmLight.WP7程序集中的GalaSoft.MvvmLight.Command命名空间中找到
然后,您的名称空间XAML将包括:-xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.WP7"
您的按钮XAML将如下所示:-
<Button cmd:ButtonBaseExtensions.Command="{Binding MyButtonClickAction}"/>
谢谢你修改了格式,马特。这很有意义。我想我会选择独立视图模型。谢谢在MVVM Light中,您还可以通过ViewModelLocator找到VM。我个人更喜欢这样。绑定变成{binding Source={StaticResource Locator},Path=Main.MyCommand},其中Main是托管MyCommandI的VM,类似于ViewModelLocator方法。实际上,您不需要“安装”MVVM Light即可使其正常工作。在绑定能力有限的WP7中使用这种方法。哇——我不知道你能做到这一点。这将大大减少我的XAML文件--谢谢!