Data binding 如何设置ButtonBaseExtensions.Command DataContext,而不更改按钮';上下文

Data binding 如何设置ButtonBaseExtensions.Command DataContext,而不更改按钮';上下文,data-binding,windows-phone-7,mvvm-light,routed-commands,Data Binding,Windows Phone 7,Mvvm Light,Routed Commands,我正在WP7应用程序中使用mvvm light。我有一个列表框,其中包含一个对象集合的itemsource。 listbox的ItemTemplate DataTemplate包含一个按钮。该按钮包含显示绑定对象属性的文本块。如何在不更改datacontext、textblock或CommandParameter的情况下将命令分配给按钮,从而将项绑定到itemtemplate <ListBox x:Name="listBox" ItemsSource="{Binding Main.Some

我正在WP7应用程序中使用mvvm light。我有一个列表框,其中包含一个对象集合的itemsource。 listbox的ItemTemplate DataTemplate包含一个按钮。该按钮包含显示绑定对象属性的文本块。如何在不更改datacontext、textblock或CommandParameter的情况下将命令分配给按钮,从而将项绑定到itemtemplate

<ListBox x:Name="listBox" ItemsSource="{Binding Main.SomeCollection}" >
     <ListBox.ItemTemplate>
          <DataTemplate>
            <Button 
                Command:ButtonBaseExtensions.Command="{Binding Main.MyCommand}"
                Cmmand:ButtonBaseExtensions.CommandParameter="{Binding}" />
                     <TextBlock Text="{Binding Title}"/>
            </Button>
          </DataTemplate>
      </ListBox.ItemTemplate>
</ListBox>


谢谢

您需要获取对命令所在的DataContext的引用。在MVVM环境中,我们通常通过ViewModelLocator执行此操作。由于ViewModelLocator是作为全局资源公开的(在App.xaml中),因此您可以执行以下操作:

Command=“{Binding Main.MyCommand,Source={StaticResource Locator}”

当然,您也可以在Blend中直观地实现这一点

干杯,
Laurent

您需要获取对命令所在的DataContext的引用。在MVVM环境中,我们通常通过ViewModelLocator执行此操作。由于ViewModelLocator是作为全局资源公开的(在App.xaml中),因此您可以执行以下操作:

Command=“{Binding Main.MyCommand,Source={StaticResource Locator}”

当然,您也可以在Blend中直观地实现这一点

干杯,
劳伦特

是的,这修复了装订。如何混合#1,它在数据模板中,#2我在Blend中没有看到命令道具。是的,对不起,我应该更精确一些。在Windows Phone 7中,ButtonBaseExtensions的附加属性不可混合。对于WPF Silverlight 4(框架的两个版本,本机知道命令属性),可以使用混合绑定编辑器。在Windows Phone 7中,如果您想要可混合性,可以使用EventToCommand组件(来自MVVM Light Extras DLL)附加到按钮的单击事件,然后您就拥有了完全可混合性。干杯@对不起,提出了一个老话题。问题是,如果我使用viewmodel的名称(viewmodel不是单音:我在locator中将参数传递给构造函数),它将为列表中的每个项调用viewmodel的构造函数,该项具有该命令。有解决办法吗?实际上,这是很明显的行为,但以防万一……是的,这修复了绑定。如何混合#1,它在数据模板中,#2我在Blend中没有看到命令道具。是的,对不起,我应该更精确一些。在Windows Phone 7中,ButtonBaseExtensions的附加属性不可混合。对于WPF Silverlight 4(框架的两个版本,本机知道命令属性),可以使用混合绑定编辑器。在Windows Phone 7中,如果您想要可混合性,可以使用EventToCommand组件(来自MVVM Light Extras DLL)附加到按钮的单击事件,然后您就拥有了完全可混合性。干杯@对不起,提出了一个老话题。问题是,如果我使用viewmodel的名称(viewmodel不是单音:我在locator中将参数传递给构造函数),它将为列表中的每个项调用viewmodel的构造函数,该项具有该命令。有解决办法吗?实际上,这是很明显的行为,但以防万一。。