C# 如何调试/排除未触发的事件?
在我的一个视图中,TabControl上有两个事件触发器:C# 如何调试/排除未触发的事件?,c#,wpf,mvvm,data-binding,mvvm-light,C#,Wpf,Mvvm,Data Binding,Mvvm Light,在我的一个视图中,TabControl上有两个事件触发器: <i:Interaction.Triggers> <i:EventTrigger EventName="SelectedItemChanged"> <cmd:EventToCommand Command="{Binding TestCommand}"/> </i:EventTrigger> <i:EventTrigger EventName="
<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);
}
RelayCommand\u t;
public RelayCommand TestCommand{get{return\u t???(\u t=new RelayCommand(foo));}
void foo()
{
//这只是为了看看事件是否触发。
System.Windows.MessageBox.Show(“已启动”);
}
RelayCommand\u closeworkspace命令;
public relay命令closeCurrentWorkspace命令
{
获取{return\u closeworkspacecondrom??(\u closeworkspacecondrom=newrelaycommand(CloseWorkspace));}
}
void CloseWorkspace()
{
//工作空间是一个可观察的集合
工作区。删除(选择编辑项);
}
当所选项目(或索引)更改时,SelectedItemChanged事件从不激发。将事件更改为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>
修复了它
结果证明我参加了错误的活动。我应该已经绑定到SelectionChanged
。我只是在Blend中查看触发器窗格时才发现这一点。它没有给我选择SelectedIndexChanged
或SelectedItemChanged
的选项
尽管事后看来,SelectionChanged更有意义,因为当项目更改时,索引也会更改,而且据我所知,您无法重新排列控件中的选项卡
因此正确的代码是:
<i:EventTrigger EventName="SelectionChanged">
<cmd:EventToCommand Command="{Binding TestCommand}"/>
</i:EventTrigger>
Syncfusion。既然您选择了dex=“{Binding SelectedIndex}”,为什么要触发SelectedItemChanged?如果SelectedIndex绑定良好,那么一切都将正常。我已尝试SelectedIndexChanged事件,但它仍然不会触发。