2010-07-27 147 views
1

我目前正在試驗WPF。 有一件事,我想要做的是一個大師來詳細選擇多個組合框。 我有一個ViewModel與GroupItems,我用作ItemSource的第一個組合框。這些GroupItems有一個名爲Childs的屬性,其中包含屬於該組的項目列表。綁定到SelectedItem屬性的屬性

我找不到一種方法將comboBox1.SelectedItem.Childs作爲Itemsource綁定到第二個comboBox。

現在我只得到了

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

但我沒有得到的SelectedItem的屬性。如何才能做到這一點?或者這不是WPF的方式嗎?

有沒有什麼好的網站可以學習如何選擇不同的元素?吞吐路徑,XPath,源代碼和一切?

感謝您的任何幫助。

回答

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; } 
     } 
    } 
} 
+0

感謝我有同樣的問題這個解決方案工作。 – Paparazzi 2011-08-14 19:03:16