【发布时间】:2016-06-06 14:17:59
【问题描述】:
在我的一个观点中,我在 TabControl 上有 2 个事件触发器:
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectedItemChanged">
<cmd:EventToCommand Command="{Binding TestCommand}"/>
</i:EventTrigger>
<i:EventTrigger EventName="TabClosed">
<cmd:EventToCommand Command="{Binding CloseCurrentWorkspaceCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
这里是命令绑定的代码:
RelayCommand _t;
public RelayCommand TestCommand { get { return _t ?? (_t = new RelayCommand(foo)); } }
void foo()
{
// This is just to see if the event is firing.
System.Windows.MessageBox.Show("Fired");
}
RelayCommand _closeWorkspaceCommand;
public RelayCommand CloseCurrentWorkspaceCommand
{
get { return _closeWorkspaceCommand ?? (_closeWorkspaceCommand = new RelayCommand(CloseWorkspace)); }
}
void CloseWorkspace()
{
// Workspaces is a ObservableCollection<WorkspaceViewModel>
Workspaces.Remove(SelectedItem);
}
当所选项目(或索引)更改时,选定的幂瞬断事件从未触发。将事件更改为 SelectedIndexChanged 也无效。 TabClosed 事件触发没有问题。 SelectedIndex 和 SelectedItem 绑定正在相应更新。
我检查了输出窗口,没有看到任何绑定错误或任何可能表明绑定错误的内容。
我怎样才能开始诊断为什么这个事件不会触发?
完整的控制代码:
<wpf:TabControlExt Grid.Row="1"
ItemsSource="{Binding Workspaces}"
SelectedItem="{Binding SelectedItem}"
SelectedIndex="{Binding SelectedIndex}">
<wpf:TabControlExt.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Header, Mode=TwoWay}"/>
</DataTemplate>
</wpf:TabControlExt.ItemTemplate>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectedItemChanged">
<cmd:EventToCommand Command="{Binding TestCommand}"/>
</i:EventTrigger>
<i:EventTrigger EventName="TabClosed">
<cmd:EventToCommand Command="{Binding CloseCurrentWorkspaceCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</wpf:TabControlExt>
【问题讨论】:
-
<wpf:TabControlExt- 这是来自哪个库? -
Syncfusion.help.syncfusion.com/wpf/tabext/overview
-
既然你有 SelectedIndex="{Binding SelectedIndex}" ,为什么还要触发 SelectedItemChanged 呢?如果 SelectedIndex 绑定良好,那么一切都会好的
-
我已经尝试过 SelectedIndexChanged 事件,但它仍然不会触发。
标签: c# wpf mvvm data-binding mvvm-light