在我的带有DataTemplates的xaml文件中,我想将DataContextChanged事件添加到其中一个模板中的ListBox,所以我这样做:
<DataTemplate x:Key="MyTemplate">
<ListBox Background="Transparent"
DataContext="{Binding Source={StaticResource Locator}}"
DataContextChanged="MyListBox_DataContextChanged"
SelectedItem="{Binding MyViewModel.SelSegment, Mode=TwoWay}"/>
</DataTemplate>
但是在哪个文件中实现“MyListBox_DataContextChanged”?
答案 0 :(得分:1)
在使用Mvvm时,你不会像处理代码时那样直接处理事件,在你的情况下,处理DataContextChanged
的命令应该在页面的相应ViewModel中实现使用DataTemplate
,
最后使用简单的hack,你可以在DataContextChanged
事件得到执行时执行相关的命令,你的代码应如下所示:
Xaml:
<DataTemplate x:Key="MyTemplate">
<ListBox Background="Transparent"
DataContext="{Binding Source={StaticResource Locator}}"
SelectedItem="{Binding MyViewModel.SelSegment, Mode=TwoWay}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="DataContextChanged">
<command:EventToCommand Command="{Binding Mode=OneWay,Path=MyViewModel.MyListBox_DataContextChangedCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ListBox>
</DataTemplate>
并将以下命令添加到ViewModel:
private RelayCommand __myListBox_DataContextChangedCommand;
public RelayCommand MyListBox_DataContextChangedCommand
{
get
{
return __myListBox_DataContextChangedCommand
?? (__myListBox_DataContextChangedCommand = new RelayCommand(
() =>
{
//Your Event's Handler Goes Here
}));
}
}
修改:
您可以阅读有关EventToCommand
的更多信息
Commands, RelayCommands and EventToCommand