我已阅读关于EventToCommand论坛上提供的每个答案,无法让我的事件触发。这是构成我的问题的代码片段。我正在使用Visual Studio 2015社区版。MVVM Light EventToCommand - 无法获取evnt触发
用户控件声明:
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cmd="http://www.galasoft.ch/mvvmlight"
<UserControl.DataContext>
<vm:MenuTreeViewModel></vm:MenuTreeViewModel>
</UserControl.DataContext>
<syncfusion:TreeViewAdv x:Name="treeMain" Width="340" Margin="10,0,0,0"
ItemsSource="{Binding Collection, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}" Grid.ColumnSpan="1"
VisualStyle="ShinyBlue" FontFamily="Verdana" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Top" VerticalAlignment="Top"
HorizontalAlignment="Left" FontSize="11" Height="768"
ScrollViewer.VerticalScrollBarVisibility="Auto" Visibility="Visible">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectedItemChanged">
<cmd:EventToCommand Command="{Binding DataContext.SelectedItemChanged,
ElementName=treeMain, Mode=OneWay}"
PassEventArgsToCommand="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
我的视图模型逻辑:
MenuTreeViewModel代码:
public void SelectedItemChanged(object sender,
RoutedPropertyChangedEventArgs<object> e)
{
if (e.NewValue is Models.MenuTree)
{
// This is the Top Level Clients item
// Nothing needs to be done.
// clear out Current items of all Model types
// MenuTree tree = (MenuTree)e.NewValue;
}
if (e.NewValue is Models.Provider)
{
//MessageBox.Show("Provider";
// Set CurrentProvider to the selected item.
Dal db = new Dal();
}
if (e.NewValue is Models.Batch)
{
MessageBox.Show("Batch");
}
if (e.NewValue is Models.Consumer)
{
MessageBox.Show("Consumer");
}
}
}
我知道我必须失去了一些东西。有人可以帮忙吗?
谢谢你。
戴夫ķ
我不认为你可以绑定到这样的默认方法....你需要一个'ICommand'运行你的方法。 – Rachel
就像@Rachel说的,你只能绑定一个'ICommand'。因此,名称,事件*命令*。 – Andro