[WPF];针对Caliburn.Micro中的TreeView的扩展事件

时间:2017-03-02 11:27:57

标签: wpf mvvm caliburn.micro

树视图元素上的

“TreeViewItem.Expanded”事件,代码如下:

<TreeView ItemsSource="{Binding Nodes}"
         [Event TreeViewItem.Expanded]=[Action Expanded($this)];
         [Event TreeViewItem.Collapsed]=[Action Collapsed($dataContext)]">
<TreeView.ItemTemplate>
     <HierarchicalDataTemplate ItemsSource="{Binding Nodes}">
      ...
     </HierarchicalDataTemplate>
 </TreeView.ItemTemplate></TreeView> 

它不能正常工作。

这是我的ViewModel

public class MyViewModel{
.......
public void Expanded(Nodes node)
{
..........
}
}

感谢下,
Raghava

2 个答案:

答案 0 :(得分:1)

首先,你错过了前3行中最重要代码的最大部分......

您向我们展示的代码,希望是一个错字,因为它确实是一个XAML错误。 C.M.需要附加属性 Message.Attach 。查看您要捕获的事件。请记住,这些方法的签名需要准确,否则CM将无法在您的视图模型中找到它们。

<TreeView ItemsSource="{Binding Nodes}"
         Message.Attach="[Event TreeViewItem.Expanded]=[Action Expanded($this)];
         [Event TreeViewItem.Collapsed]=[Action Collapsed($dataContext)]">
<TreeView.ItemTemplate>
     <HierarchicalDataTemplate ItemsSource="{Binding Nodes}">
      ...
     </HierarchicalDataTemplate>
 </TreeView.ItemTemplate></TreeView> 

我的建议是首先在视图的代码隐藏中创建这些方法,然后在属性窗口中双击该事件。然后在你的viewmodel中复制方法,你可以省略某些东西,但为了它的工作,它必须按照我的指示连线。

摩根。

答案 1 :(得分:0)

如果您的要求是在视图模型中获取IsExpanded项,则可以将TreeViewItem的IsExpanded绑定到viewmodel中的属性。

<Style TargetType="{x:Type TreeViewItem}">
     <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
     <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
</Style>

ViewModel代码:

public class ViewModel
{

    private bool isExpanded;
    public bool IsExpanded
    {
        get
        {
            return isExpanded;
        }
        set
        {
            isExpanded = value;
            MessageBox.Show("IsExpanded changed");
        }
    }
}