可编辑的ItemsControl DataTemplate与WPF 4.0上的MVVM模式

时间:2011-06-27 04:48:49

标签: wpf mvvm command datatemplate itemscontrol

我在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>

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

所有我需要做的 - 是Craete STATIC ICommand属性,并使用以下代码

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