2011-05-15 186 views
3

首先,我想,我的英語道歉是遠遠不夠完善(它不是我的母語...)。WPF/C#組合框數據綁定

我已經在我的XAML代碼與數據綁定的一個問題。我有一個combox,它應該列出我放在自定義畫布上的所有圖形節點。我的圖形節點在列表graphCanvas.uinodes中引用,並且每個節點都有一個name。這就是我想要在我的組合框中顯示的內容。

所以,我想是這樣的:

<ComboBox ItemsSource="{Binding ElementName=graphCanvas, Path=uinodes/name}" 
    Height="23" HorizontalAlignment="Left" Name="comboBox1" 
    VerticalAlignment="Top" Width="71" Foreground="Black" /> 

但即使在我的畫布我COMBOX是空的工程圖節點後...

任何線索?

謝謝。

回答

1

A,使用ElementName結合找到具有該名稱的WPF元件。我懷疑你已經子類Canvas並添加uinodes屬性,它是唯一的方法,Path會發現的東西,即使路徑語法是正確的,事實並非如此。

如果您在輸出窗口看,當你運行你的程序,你會看到告訴你爲什麼綁定不工作的錯誤消息。這是一個開始。

但即便如此,你不會得到你想要的這種方法是什麼。你可能想什麼看起來更像是:

<ComboBox ItemsSource="{Binding ElementName=graphCanvas, Path=uinodes}" 
      DisplayMemberPath="name"/> 

甚至

<ComboBox ItemsSource="{Binding ElementName=graphCanvas, Path=uinodes}"> 
    <ComboBox.ItemTemplate> 
     <TextBlock Text="{Binding name}"/> 
    </ComboBox.ItemTemplate> 
</ComboBox> 
+0

然後我該如何更新我的組合框? – mmj 2011-05-15 10:03:34

+0

如果你綁定的是一個'ObservableCollection '或者任何實現了'INotifyCollectionChanged'的東西,你就不會。只需更新集合,綁定將爲您更新「ComboBox」。 – 2011-05-15 17:51:34

0

你的綁定(特別是Path分配)看起來是錯誤的。假設uinodes是某種類型的Enumerable,它看起來好像你試圖綁定到不存在的集合的`name'屬性。試試這個:

ItemsSource="{Binding ElementName=graphCanvas, Path=uinodes}" DisplayMemberPath="name" 

另外,您可以使用輸出窗口來查看任何綁定錯誤。

+0

事實上它的作品! 我以前使用的是由VS使用Combox的屬性等生成的。它似乎沒有我想象的那麼好。 謝謝。 – mmj 2011-05-15 09:46:35

+0

但是我有另一個與該組合框有關的問題。 當我在畫布上繪製節點N1,N2,N3之後打開我的組合框時,它們列在combox中。但是,之後,如果我嘗試另一個節點它不會被添加到我的組合框。我不知道爲什麼ItemsSource沒有更新。我嘗試使用: ItemsSource =「{Binding ElementName = graphCanvas,Path = uinodes,UpdateSourceTrigger = LostFocus}」DisplayMemberPath =「name」 – mmj 2011-05-15 09:57:35