Способ совместного использования DisplayMemberPath и ItemTemplate?

Как показано в приведенном ниже коде XAML, у меня есть ListView с меткой; И в этом ярлыке есть ContextMenu. ContextMenu находится в DataTemplate, а ресурсы ItemTemplate из ListView. Во-вторых, у меня есть свойство DisplayMemberPath, которое ссылается на метод в одном из моих классов.

 <ListView x:Name="TitleList" ItemsSource="{Binding Collections}" ItemTemplate="{DynamicResource Template}" BorderBrush="{x:Null}" DisplayMemberPath="Title">
            <ListView.ItemContainerStyle>
            <Style>
                <Setter Property="FrameworkElement.Margin" Value="20,20,0,0"/>
            </Style>
            </ListView.ItemContainerStyle>
            <ListView.Resources>
                <DataTemplate x:Key="Template">
                    <Label Content="{Binding .}" Width="500" HorizontalAlignment="Left">
                        <Label.ContextMenu>
                            <ContextMenu>
                                <MenuItem Header="Add Question" Click="AddQuestion"/>
                                <MenuItem Header="Edit Title"/>
                                <MenuItem Header="Delete Title"/>
                                <MenuItem Header="Reposition Title"/>
                            </ContextMenu>
                        </Label.ContextMenu>
                    </Label>
                </DataTemplate>
                </ListView.Resources>
        </ListView>

У меня проблема в том, что DisplayMemberPath и ItemTemplate не могут одновременно быть свойствами моего ListView, но мне нужны оба.

Есть ли другой способ получить ContextMenu без использования ItemTemplate или есть другое решение?

ИЗМЕНИТЬ:

Пытался завершить это и попытался изменить это:

<ListView x:Name="TitleList" ItemsSource="{Binding Collections}" ItemTemplate="{DynamicResource Template}" BorderBrush="{x:Null}" SelectedValuePath="Title">

<ListView x:Name="TitleList" ItemsSource="{Binding Collections}" ItemTemplate="{DynamicResource Template}" BorderBrush="{x:Null}" TextSearch.TextPath="Title">

Оба они позволяют мне щелкнуть правой кнопкой мыши, и отобразится меню, но строка отображается как MVVMModel.NewTitleClass.


person user3157821    schedule 20.01.2014    source источник
comment
Боковое примечание: ваш код обработчика событий не очень MVVM   -  person Gusdor    schedule 20.01.2014
comment
@Gusdor Что ты имеешь в виду?   -  person user3157821    schedule 20.01.2014
comment
Отвечает ли это на ваш вопрос? c# wpf - нельзя установить одновременно DisplayMemberPath и ItemTemplate   -  person StayOnTarget    schedule 19.02.2020


Ответы (2)


Удалите DisplayMemberPath. Вы используете собственный шаблон того, как должен выглядеть ListViewItem. Проблема связана с привязкой содержимого вашего ярлыка. Измените его на это (или немного поработайте, если это не сработает):

Content="{Binding Title}"

Другой вариант заключается в том, что когда вы не указываете свойство для отображения при привязке элемента управления, он использует результат ToString(). Если вы не переопределили это, будет показано полное имя класса. Таким образом, вы можете переопределить ToString() следующим образом:

public override ToString()
{
   return Title;
}

Хотя первый вариант будет лучшим выбором.

person Lee O.    schedule 21.01.2014

... Мне нужны оба ...

Нет

Просто добавьте дополнительный элемент в DataTemplate, чтобы отобразить Title каждого элемента.

person Gusdor    schedule 20.01.2014
comment
Как мне этого добиться? - person user3157821; 20.01.2014