【问题标题】:Editable ItemsControl DataTemplate with MVVM pattern on WPF 4.0WPF 4.0 上带有 MVVM 模式的可编辑 ItemsControl DataTemplate
【发布时间】:2011-09-23 05:44:36
【问题描述】:

在我的 ItemsControls(或我的视图或 viewModel)中定义项目时遇到问题。可能我对mvvm一无所知,但这是问题所在。 我将 DataTemplate 定义为

<DataTemplate>
    <Expander>
        <Expander.Header>
            <StackPanel>
            <TextBlock Margin="2" Text="{Binding Name}" />
            <TextBlock>                
                <Hyperlink>
                    <Run Text="Delete group" />
                </Hyperlink>
            </TextBlock>
            </StackPanel>
        </Expander.Header>
        <Expander.Content>
            blah-blah-blah
        </Expander.Content>
     </Expander>
 </DataTemplate>

我有很多扩展器,每个扩展器都有一个超链接。我希望超链接删除该组 - 即删除相应的扩展器。我已阅读有关使用 Visual and Logical - TreeHelper 在 DataTemplate 上搜索的内容,但这是解决我的问题的不好方法 - 它不遵循 mvvm。我知道我需要为超链接编写一个命令,但是如何检索我需要删除的 Expander 并满足 mvvm - 这就是问题所在。

任何建议,任何建议......

【问题讨论】:

    标签: wpf mvvm command datatemplate itemscontrol


    【解决方案1】:

    但是,如果由于某些开发原因无法创建staticICommand属性,则应使用RelativeSource查找祖先,将DataContext设置为具有此命令的ViewModel。

    <Hyperlink Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, 
                                                  AncestorType=ItemsControl}, 
                        Path=DataContext.DeleteFileGroup}" 
               CommandParameter="{Binding}">
                  <Run Text="Delete group"/>
    </Hyperlink>
    

    【讨论】:

      【解决方案2】:

      我需要做的就是创建 STATIC ICommand 属性,并使用以下代码

      <Hyperlink Command="{x:Static vm:FileGroupViewModel.DeleteGroup}" CommandParameter="{Binding}">
          <Run Text="Delete group"/>
      </Hyperlink>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-19
        相关资源
        最近更新 更多