Bind Expanded& TreeViewItem的倒塌事件到viewmodel

时间:2015-10-31 21:27:46

标签: c# wpf mvvm binding

前段时间我在这里问过如何将展开的事件绑定到viewmodel并使用AttachedCommandBehavior找到解决方案:

<TreeView Name="tv" ItemsSource="{Binding TreeViewElements}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children, Mode=OneTime}">
            <StackPanel Orientation="Horizontal">
                <Label Content="{Binding Title, Mode=OneTime}" />
            </StackPanel>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
    <TreeView.ItemContainerStyle>
        <Style TargetType="{x:Type TreeViewItem}">
            <Setter Property="local:CommandBehavior.Event" Value="Expanded"></Setter>
            <Setter Property="local:CommandBehavior.Command" Value="{Binding DataContext.ExpandCommand, ElementName=tv}"></Setter>
            <Setter Property="local:CommandBehavior.CommandParameter" Value="{Binding}"></Setter>
        </Style>
    </TreeView.ItemContainerStyle>
</TreeView>

现在也需要绑定折叠事件。 将此添加到此类样式部分不起作用,只有折叠事件被绑定:

<Setter Property="local:CommandBehavior.Event" Value="Expanded"></Setter>
<Setter Property="local:CommandBehavior.Command" Value="{Binding DataContext.ExpandCommand, ElementName=tv}"></Setter>
<Setter Property="local:CommandBehavior.CommandParameter" Value="{Binding}"></Setter>
<Setter Property="local:CommandBehavior.Event" Value="Collapsed"></Setter>
<Setter Property="local:CommandBehavior.Command" Value="{Binding DataContext.CollapseCommand, ElementName=tv}"></Setter>
<Setter Property="local:CommandBehavior.CommandParameter" Value="{Binding}"></Setter>

然后我在AttachedCommandBehavior主页上找到了一个使用行为集合的示例:

<local:CommandBehaviorCollection.Behaviors>
    <local:BehaviorBinding Event="MouseLeftButtonDown" Action="{Binding DoSomething}" CommandParameter="An Action on MouseLeftButtonDown"/>
    <local:BehaviorBinding Event="MouseRightButtonDown" Command="{Binding SomeCommand}" CommandParameter="A Command on MouseRightButtonDown"/>
</local:CommandBehaviorCollection.Behaviors>

问题是在样式部分添加这样的集合不起作用,visual studio会给出行为属性无法附加到样式的错误。

有谁知道如何将两个事件绑定到viewmodel?

1 个答案:

答案 0 :(得分:0)

这样做:

<Style TargetType="{x:Type TreeViewItem}">
 <Setter Property="local:CommandBehaviorCollection.Behaviors">
  <Setter.Value>
   <local:BehaviorBinding Event="MouseLeftButtonDown" Action="{Binding DoSomething}" CommandParameter="An Action on MouseLeftButtonDown"/>
   <local:BehaviorBinding Event="MouseRightButtonDown" Command="{Binding SomeCommand}" CommandParameter="A Command on MouseRightButtonDown"/>
  </Setter.Value>
 </Setter>
</Style>