C# 通过样式将命令指定给网格中的一组按钮

C# 通过样式将命令指定给网格中的一组按钮,c#,xaml,silverlight,windows-phone-8,C#,Xaml,Silverlight,Windows Phone 8,在silverlight中,是否可以将相同的命令分配给网格样式中的一组按钮?或者将其分配到公共位置,而不是重复 我的意思是像使用这个- <Style TargetType="Button"> <Setter Property="Command" Value="{Binding Command1}"/> </Style> 而不是- <Button Command="{Binding Command1}"/> <Button Com

silverlight
中,是否可以将相同的命令分配给网格样式中的一组按钮?或者将其分配到公共位置,而不是重复

我的意思是像使用这个-

<Style TargetType="Button">
   <Setter Property="Command" Value="{Binding Command1}"/>
</Style>

而不是-

<Button Command="{Binding Command1}"/> 
<Button Command="{Binding Command1}"/> 
<Button Command="{Binding Command1}"/> 
           ...
<Button Command="{Binding Command1}"/> 

...

这是可能的。通过一种简单的方式,您可以将样式添加到
资源中
,并将其用作
静态资源
。假设
Command1
属于
ViewModel
,您将绑定到
窗口。如果没有,请提供
命令1的正确路径以正确绑定它

<Window.Resources>
  <Style x:Key="buttonCommandStyle" TargetType="Button">
    <Setter Property="Command" Value="{Binding Path=DataContext.Command1}" />
  </Style>
</Window.Resources>  

这是可能的。通过一种简单的方式,您可以将样式添加到
资源中
,并将其用作
静态资源
。假设
Command1
属于
ViewModel
,您将绑定到
窗口。如果没有,请提供
命令1的正确路径以正确绑定它

<Window.Resources>
  <Style x:Key="buttonCommandStyle" TargetType="Button">
    <Setter Property="Command" Value="{Binding Path=DataContext.Command1}" />
  </Style>
</Window.Resources>  

你要找的是那个


绑定
将针对每个项进行评估,因此您有几种提供命令实例的方法:

  • 您可以将相同的命令实例作为公共属性放置在每个itemInstance中
  • 您可以为
    绑定设置一个源或相对源,以便根据
    ItemsControl
    DataContext
    对其进行评估,而不是针对每个项:
    {Binding Path=DataContext.Command1,ElementName=MyItemsControl}

您正在寻找的是


绑定
将针对每个项进行评估,因此您有几种提供命令实例的方法:

  • 您可以将相同的命令实例作为公共属性放置在每个itemInstance中
  • 您可以为
    绑定设置一个源或相对源,以便根据
    ItemsControl
    DataContext
    对其进行评估,而不是针对每个项:
    {Binding Path=DataContext.Command1,ElementName=MyItemsControl}

…然后他不得不重复令人厌恶的风格分配。如果未指定源,则始终根据DataContext属性计算绑定路径。在Setter中使用绑定会导致XamlParseException@BellsSilverLight 5中引入了Setter中的绑定。你确定你的绑定字符串
Source
Path
正确吗?他使用的是windowsPhone silverlight版本,该版本不允许silverlight 5功能。@Martin我没有注意到
windowsPhone-8
标记……然后他不得不重复样式分配。如果未指定源,则始终根据DataContext属性计算绑定路径。在Setter中使用绑定会导致XamlParseException@BellsSilverLight 5中引入了Setter中的绑定。您确定您的绑定字符串
Source
Path
正确吗?他使用的是windowsPhone silverlight版本,不允许使用silverlight 5功能。@Martin我没有注意到
windowsPhone-8
标记。
<ItemsControl x:Name="MyItemsControl" ItemsSource="{Binding MyButtonItems}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Button Command="{Binding Command1}"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>