【问题标题】:How do I debug/troubleshoot an event not firing?如何调试/故障排除未触发的事件?
【发布时间】: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 也无效。 TabClos​​ed 事件触发没有问题。 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>

【问题讨论】:

  • &lt;wpf:TabControlExt - 这是来自哪个库?
  • 既然你有 SelectedIndex="{Binding SelectedIndex}" ,为什么还要触发 SelectedItemChanged 呢?如果 SelectedIndex 绑定良好,那么一切都会好的
  • 我已经尝试过 SelectedIndexChanged 事件,但它仍然不会触发。

标签: c# wpf mvvm data-binding mvvm-light


【解决方案1】:

修复它。

原来我绑定了错误的事件。我应该绑定到SelectionChanged。我只是在通过 Blend 中的 Triggers 窗格时才发现这一点的。它没有让我选择SelectedIndexChangedSelectedItemChanged

尽管事后看来,SelectionChanged 更有意义,因为当项目更改时,索引会更改,据我所知,您无法重新排列控件中的选项卡。

所以正确的代码是:

<i:EventTrigger EventName="SelectionChanged">
    <cmd:EventToCommand Command="{Binding TestCommand}"/>
</i:EventTrigger>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多