WPF ListViewItem样式是否破坏了数据绑定?

8cdiaqws  于 2022-11-18  发布在  其他
关注(0)|答案(2)|浏览(165)

我对WPF有点陌生,我有一个绑定的listview,它使用gridview来显示对象及其属性的列表。我的整个项目使用了MaterialDesign中的一个自定义样式,它给所有的东西一个 * dark-theme *。
我想添加doubleclick功能到我的listview中的项目,我发现,我可以通过改变ListViewItem的样式来做到这一点。然而,这覆盖了我的MaterialDesign主题的默认样式,项目变得丑陋。
然后我添加了BasedOn="{StaticResource {x:Type ListViewItem}}"以恢复默认样式,但随后绑定停止工作,它停止显示对象的属性?
有没有更好的方法将Setter添加到元素的样式中?设置样式如何改变数据绑定?

<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>

我所期望的是一个如下所示的ListView,它可以双击。x1c 0d1x
但我得到的是一个列表视图,看起来像下面的

,并有工作双击。
这是没有BasedOn="{StaticResource {x:Type ListViewItem}}"

时的样子

flvtvl50

flvtvl501#

您的样式应该以MaterialDesignGridViewItem资源为基础:

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

fwzugrvs2#

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

<ListView MouseDoubleClick="ListView_MouseDoubleClick"

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

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

如果双击标题或分隔线,您可能必须对hsl进行null检查,以避免出现不好的情况。

相关问题