绑定到SelectedItem属性的属性

时间:2010-07-27 11:22:43

标签: wpf data-binding

我目前正在尝试使用WPF。 有一件事,我想做的是掌握多个组合框的细节选择。 我有一个带有GroupItems的ViewModel,我用作第一个组合框的ItemSource。这些GroupItems有一个名为Childs的属性,其中包含属于该组的项目列表。

我找不到将comboBox1.SelectedItem.Childs绑定为第二个comboBox的Itemsource的方法。

现在我只能

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

但是我没有得到SelectedItem的属性。如何才能做到这一点?或者这不是WPF的方式吗?

有没有好的网站可以学习如何选择不同的元素? Eplaining Path,XPath,Source和Everything?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

上面的绑定不是试图绑定到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; }
        }
    }
}