Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF:在样式和/或数据模板(MVVM)中绑定命令?_Wpf_Mvvm_Binding_Styles - Fatal编程技术网

WPF:在样式和/或数据模板(MVVM)中绑定命令?

WPF:在样式和/或数据模板(MVVM)中绑定命令?,wpf,mvvm,binding,styles,Wpf,Mvvm,Binding,Styles,下面是对我的情况的非常快速和简单的解释。我已经为Hyperlink控件定义了一种样式,它们将Command属性绑定到ViewModel类中定义的命令(简化): 这个管用,但看起来太脏了。我做错了吗?有没有更好的方法,更多 MVVM怎么样?这是脆弱的,因为我正在样式中设置特定的元素名称 首先在样式内部编写命令绑定是一种好的做法吗 地点?如果没有,还有什么选择?如果我开发了一个复杂的用户控件, 如何将命令设置到逻辑树深处的组件 谢谢你的帮助 另一种语法将使用RelativeSource 我认为用一

下面是对我的情况的非常快速和简单的解释。我已经为
Hyperlink
控件定义了一种样式,它们将
Command
属性绑定到
ViewModel
类中定义的命令(简化):

这个管用,但看起来太脏了。我做错了吗?有没有更好的方法,更多 MVVM怎么样?这是脆弱的,因为我正在样式中设置特定的元素名称

  • 首先在样式内部编写命令绑定是一种好的做法吗 地点?如果没有,还有什么选择?如果我开发了一个复杂的
    用户控件
    , 如何将命令设置到逻辑树深处的组件

  • 谢谢你的帮助

  • 另一种语法将使用RelativeSource

  • 我认为用一种风格编写命令绑定没有任何问题

  • <Window.Resources>
      ...
      <Style x:Key="hyperlinkStyle" TargetType="Hyperlink">
        ...
        <Setter Property="Command" Value="{Binding Path=OpenHyperlinkCommand}" />
        ...
      </Style>
      ...
    </Window.Resources>
    
    <Window>
      ...
      <ContentControl 
          ...
          ContentTemplate="{StaticResource myDataTemplate}" />
      ...
    </Window>
    
    <Window.Resources>
      ...
      <DataTemplate x:Key="myDataTemplate DataType="{x:Type my:MyType}">
        ...
        <TextBlock>
          <Hyperlink 
              Style="{StaticResource hyperlinkStyle}" 
              CommandParameter="{Binding Path=Uri1}">
            <TextBlock Text="{Binding Path=Uri1}" />
          </Hyperlink>
        </TextBlock>
        ...
        <TextBlock>
          <Hyperlink 
              Style="{StaticResource hyperlinkStyle}" 
              CommandParameter="{Binding Path=Uri2}">
            <TextBlock Text="{Binding Path=Uri2}" />
          </Hyperlink>
        </TextBlock>
        ...
      </DataTemplate>
      ...
    </Window.Resources>
    
    <Setter Property="Command" Value="{Binding ElementName=myWindow Path=DataContext.OpenHyperlinkCommand}" />