0

此方法有效的按钮事件将 TreeView 元素传递给 ViewModel,但未传递短语法事件,问题出在哪里?谢谢。

<Button Content="Search in TreeView" Height="34" Width="100">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
            <cal:ActionMessage MethodName="SearchTreeView">
                <cal:Parameter Value="{Binding ElementName=TreeView}" />
            </cal:ActionMessage>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>
<TreeView x:Name="TreeView" ItemsSource="{Binding TreeViewSource}"/>

短句法事件

<Button x:Name="SearchTreeView" Content="Search in TreeView" cal:Message.Attach="[Event Click] = [Action SearchTreeView($source.TreeView)]" />

<TreeView x:Name="TreeView" ItemsSource="{Binding TreeViewSource}"/>
4

1 回答 1

2

不需要指定$source.Treeview,只要元素的名字TreeView就够了

<Button x:Name="SearchTreeView" Content="Search in TreeView" cal:Message.Attach="[Event Click] = [Action SearchTreeView(TreeView)]" />

<TreeView x:Name="TreeView" ItemsSource="{Binding TreeViewSource}"/>

也就是说,将控件传递给 ViewModel 并不是一个好主意。如果你想对选中的项目做一些事情,你应该将 TreeView 的 SelectedItem 属性绑定到你的 ViewModel 上的一个属性,并从你的 SearchTreeView 方法中访问它,例如

<Button x:Name="SearchTreeView" Content="Search in TreeView" cal:Message.Attach="[Event Click] = [Action SearchTreeView()]" />

<TreeView x:Name="TreeView" ItemsSource="{Binding TreeViewSource}" SelectedItem={Binding MySelectedItem}"/>
于 2013-07-19T10:00:40.650 回答