如何将鼠标单击绑定到HierarchicalDataTemplate中的ContentPresenter到ViewModel?

时间:2014-11-15 18:24:31

标签: c# wpf xaml mvvm

我在TreeView中使用了以下DataTemplate。

如何让ContentPresenter上的LeftMouseClick以MVVM方式绑定到DataType的属性?

感谢您提供任何帮助(或更好的主意)。

<DataTemplate x:Key="sharedTemplate">
            <StackPanel Orientation="Horizontal">
                <CheckBox
                    Focusable="False" 
                    IsChecked="{Binding IsChecked}" 
                    VerticalAlignment="Center"
                />
                <ContentPresenter 
                    Content="{Binding Name, Mode=OneTime}" 
                    Margin="2,0"
                />
            </StackPanel>
</DataTemplate>


   <TreeView 
            ItemContainerStyle="{StaticResource TreeViewItemStyle}"
            ItemsSource="{Binding ReportTree}"  >

            <TreeView.Resources>
                <HierarchicalDataTemplate 
                DataType="{x:Type r:ReportViewModel}" 
                ItemsSource="{Binding Children}"
                >

                    <ContentControl Content="{Binding}"
                            ContentTemplate="{StaticResource sharedTemplate}" />

                </HierarchicalDataTemplate>

    ................

附录:这有效!

<DataTemplate DataType="{x:Type r:PrinterViewModel}">
                    <!--Bind the ContentControl to the DataType-->
                    <ContentControl Content="{Binding}" 
                                    ContentTemplate="{StaticResource sharedTemplate}" >
                        <i:Interaction.Triggers>
                            <i:EventTrigger EventName="MouseDoubleClick">
                                <h:EventToCommand                                    
                                Command="{Binding DataContext.SelectItem, RelativeSource={RelativeSource FindAncestor, AncestorType=TreeView}}"
                                CommandParameter="{Binding}" />
                            </i:EventTrigger>
                       </i:Interaction.Triggers>
                    </ContentControl>
                </DataTemplate>

附录:事实证明,上面的Interaction.Trigger可以正确地将选定的视图模型发送回TreeView的DataContext。问题解决了。

0 个答案:

没有答案