WPF ListViewItem样式打破了数据绑定?

问题描述 投票:2回答:2

我是WPF的新手,我有一个绑定列表视图使用gridview来显示对象及其属性的列表。我的整个项目使用MaterialDesign中的自定义样式,它为所有内容提供了一个黑暗的主题。

我想为listview中的项添加双击功能,我发现我可以通过更改ListViewItem的样式来实现。但是,这覆盖了我的MaterialDesign主题的默认样式,因此项目变得难看。

然后我添加了BasedOn="{StaticResource {x:Type ListViewItem}}"来恢复默认样式,但随后绑定停止工作并停止显示对象的属性?

可能有更好的方法将Setters添加到元素的样式中?设置样式如何改变数据绑定的任何内容?

<ListView.ItemContainerStyle>
    <Style TargetType="{x:Type ListViewItem}"  BasedOn="{StaticResource {x:Type ListViewItem}}">
        <EventSetter Event="MouseDoubleClick" Handler="HitsoundLayer_MouseDoubleClick"/>
    </Style>
</ListView.ItemContainerStyle>
<ListView.View>
    <GridView>
        <GridViewColumn Header="_Name" Width="120" DisplayMemberBinding="{Binding Name}" />
        <GridViewColumn Header="_Amount" Width="90" DisplayMemberBinding="{Binding Times.Count}" />
        <GridViewColumn Header="_SampleSet" Width="120" DisplayMemberBinding="{Binding SampleSetString}" />
        <GridViewColumn Header="_Hitsound" Width="120" DisplayMemberBinding="{Binding HitsoundString}" />
        <GridViewColumn Header="_Sample Path" Width="1000" DisplayMemberBinding="{Binding SamplePath}" />
    </GridView>
</ListView.View>

我所期待的是一个看起来像这个https://i.imgur.com/Z0oORhE.png的ListView并且已经工作了doubleclick。

但我得到的是一个ListView,看起来像这个https://i.imgur.com/6o6SCyW.png并且工作doubleclick。

这就是没有BasedOn="{StaticResource {x:Type ListViewItem}}" https://i.imgur.com/OO4Rg2v.png的样子

c# wpf listview gridview listviewitem
2个回答
0
投票

您应该将您的风格基于MaterialDesignGridViewItem资源:

<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem" BasedOn="{StaticResource MaterialDesignGridViewItem}">
        <EventSetter Event="MouseDoubleClick" Handler="HitsoundLayer_MouseDoubleClick"/>
    </Style>
</ListView.ItemContainerStyle>

0
投票

您可以将moused双击处理程序添加到列表视图本身。

<ListView MouseDoubleClick="ListView_MouseDoubleClick"

并获取对该行的datacontext的引用:

void ListView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    var hsl = ((FrameworkElement)e.OriginalSource).DataContext as HitSoundLayer;

如果双击标题或分隔线,您可能必须null检查hsl以避免不良内容。

© www.soinside.com 2019 - 2024. All rights reserved.