Установка ItemsSource для ContexMenu

301
05 марта 2017, 05:40

Нужно задавать меню коллекцией объектов.

public class Color
{
    public string Name { get; set; }
}
public ObservableCollection<Color> Colors = new ObservableCollection<Color>()
{
    new Color {Name = "black"},
    new Color {Name = "white"},
    new Color {Name = "red"},
};  

Но не могу разобраться как правильно биндить коллекцию. Делаю так, но безрезультатно. Понимаю, что проблема из-за того, что DataContext не забирается у mainWindow, но как сделать правильно?

<Window.ContextMenu>
    <ContextMenu DataContext="{Binding ElementName=mainWindow, Path=DataContext}"
                 ItemsSource="{Binding Colors}" />
</Window.ContextMenu>
Answer 1

ContextMenu не являеться частью визуального дерева поэтому он не может найти mainWindow. Данные необходимо брать из ContextMenu.PlacementTarget.

 <Window.ContextMenu>
    <ContextMenu
        DataContext="{Binding Path=PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}"
        DisplayMemberPath="Name"
        ItemsSource="{Binding Colors}" />
</Window.ContextMenu>

Кстати у вас Colors не свойсто, а поле.

READ ALSO
c# Форматирование числа (ИНН) в строку

c# Форматирование числа (ИНН) в строку

Есть числовое(decimal) поле ИНН (10, 12 символов)Первые 2-а числа в ИНН - код региона

323
Дружественная сборка

Дружественная сборка

У меня есть 2 проекта в solutionВ одном класс, где есть private методы, которые нужно протестировать

225