在DataTemplate内的ListView上添加EventTrigger会导致XamlParseException

时间:2016-11-17 20:40:35

标签: c# wpf listview datatemplate eventtrigger

我正在使用MVVMLight创建WPF应用。 我在TabControl DataTemplate中定义了一个ListView,如下所示:

<TabControl.ContentTemplate>
    <DataTemplate>
        <ListView ItemsSource="{Binding Builds}"
            ScrollViewer.HorizontalScrollBarVisibility="Disabled"
            SelectedItem="{Binding SelectedBuild,
                                    Mode=TwoWay}"
            SelectionMode="Single">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseDoubleClick">
                    <i:InvokeCommandAction Command="{Binding BuildSelectedCommand}"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </ListView>
    </DataTemplate>
</TabControl.ContentTemplate>

但是XAML Designer会返回此错误(阻止加载设计器预览):

XamlObjectWriterException: Collection property 'System.Windows.Controls.ListView'.'Triggers' is null.
at System.Xaml.XamlObjectWriter.WriteGetObject()
at System.Xaml.XamlWriter.WriteNode(XamlReader reader)
at System.Windows.FrameworkTemplate.LoadTemplateXaml(XamlReader templateReader, XamlObjectWriter currentWriter)

我的命令在我的ViewModel中定义如下:

 private RelayCommand _buildSelectedCommand;
 public RelayCommand BuildSelectedCommand => _buildSelectedCommand ??
        (_buildSelectedCommand = new RelayCommand(BuildSelectedAction));

这是我第一次看到此错误,并且仅在设计时发生,构建和运行时很好。 删除i:Interaction.Triggers可以解决问题,但我需要列表中的DoubleClick事件。

如果你问为什么我没有在ListItem级别添加触发器,那是因为我必须在ViewModel上设置一个属性来绑定TabControl Datatemplate,而不是ListItem ViewModel。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

我刚刚确认这是一个Visual Studio 2015错误,它不会在Visual Studio 2017 RC中重现。