Привязка к свойству свойства SelectedItem - PullRequest
1 голос
/ 27 июля 2010

Я сейчас экспериментирую с WPF. Одна вещь, которую я хотел сделать, - мастер детального выделения нескольких комбинированных списков. У меня есть ViewModel с GroupItems, который я использую в качестве ItemSource для первого выпадающего списка. Эти GroupItems имеют свойство Childs, которое включает в себя список элементов, принадлежащих этой группе.

Я не могу найти способ связать comboBox1.SelectedItem.Childs как Itemsource для второго comboBox.

Прямо сейчас я получил только

ItemsSource="{Binding ElementName=comboBox1, Path=SelectedItem}"

Но я не получаю свойство выбранного элемента. Как это может быть сделано? Или это не путь WPF к этому?

Есть ли хороший сайт, чтобы научиться выбирать разные элементы? Eplaining Path, XPath, Source и все?

Спасибо за любую помощь.

1 Ответ

2 голосов
/ 27 июля 2010

Ваша привязка выше не пытается привязать к Childs, только SelectedItem.

Попробуйте что-то вроде этого:

Window1.xaml

<Window x:Class="WpfApplication5.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel>
        <ComboBox x:Name="_groups" ItemsSource="{Binding Groups}" DisplayMemberPath="Name"/>
        <ComboBox ItemsSource="{Binding SelectedItem.Items, ElementName=_groups}"/>
    </StackPanel>
</Window>

Window1.xaml.cs

using System.Windows;

namespace WpfApplication5 {
    /// <summary>
    ///   Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window {
        public MainWindow() {
            InitializeComponent();

            var model = new ViewModel();

            var g1 = new Group { Name = "Group1" };
            g1._items.Add("G1C1");
            g1._items.Add("G1C2");
            g1._items.Add("G1C3");
            model._groups.Add(g1);

            var g2 = new Group { Name = "Group2" };
            g2._items.Add("G2C1");
            g2._items.Add("G2C2");
            g2._items.Add("G2C3");
            model._groups.Add(g2);

            var g3 = new Group { Name = "Group3" };
            g3._items.Add("G3C1");
            g3._items.Add("G3C2");
            g3._items.Add("G3C3");
            model._groups.Add(g3);

            DataContext = model;
        }
    }
}

ViewModel.cs

using System;
using System.Collections.Generic;

namespace WpfApplication5
{
    public class Group {
        internal List<String> _items = new List<string>();
        public IEnumerable<String> Items {
            get { return _items; }
        }
        public String Name { get; set; }
    }
    public class ViewModel
    {
        internal List<Group> _groups = new List<Group>();
        public IEnumerable<Group> Groups
        {
            get { return _groups; }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...