Стиль WPF ListViewItem нарушил привязки данных? - PullRequest
2 голосов
/ 14 апреля 2019

Я немного новичок в WPF, и у меня есть связывающий просмотр списка, использующий gridview для отображения списка объектов и их свойств. Весь мой проект использует собственный стиль из MaterialDesign, который дает всем темную тему.

Я хотел добавить функцию двойного клика к элементам в моем списке и обнаружил, что могу сделать это, изменив стиль ListViewItem. Однако это переписало стиль по умолчанию из моей темы MaterialDesign, поэтому элементы стали ужасными.

Затем я добавил BasedOn="{StaticResource {x:Type ListViewItem}}", чтобы восстановить стиль по умолчанию, но затем привязка перестала работать и перестала отображать свойства объектов?

Может ли быть лучший способ добавить сеттеры к стилю элемента? И как установка стиля что-либо меняет в привязках данных?

<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, который выглядит следующим образом https://i.imgur.com/Z0oORhE.png и имеет работающий двойной щелчок.

Но я получил ListView, который выглядит следующим образом https://i.imgur.com/6o6SCyW.png и имеет двойной щелчок.

Вот так выглядит без BasedOn="{StaticResource {x:Type ListViewItem}}" https://i.imgur.com/OO4Rg2v.png

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

Вы должны основывать свой стиль на ресурсе MaterialDesignGridViewItem:

<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem" BasedOn="{StaticResource MaterialDesignGridViewItem}">
        <EventSetter Event="MouseDoubleClick" Handler="HitsoundLayer_MouseDoubleClick"/>
    </Style>
</ListView.ItemContainerStyle>
0 голосов
/ 14 апреля 2019

Вы можете добавить обработчик mousedoubleclick к самому списку.

<ListView MouseDoubleClick="ListView_MouseDoubleClick"

и получить ссылку на текстовый текст строки:

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

Возможно, вам придется проверить нуль на hslчтобы избежать неприятностей, если дважды щелкнуть заголовок или разделительную линию.

...