2010-05-07 53 views
1

我想顯示包含有幾個值從子窗口的屬性之一來組合框的子窗口:綁定在XAML組合框的childwindow財產

public partial class MyChildWindow : ChildWindow 
{ 
    private ObservableCollection<MyClass> _collectionToBind = // initialize and add items to collection to make sure it s not empty... 

    public ObservableCollection<MyClass> CollectionToBind 
    { 
     get { return _collectionToBind; } 
     set { _collectionToBind = value; } 
    } 
} 

如何綁定在XAML我的組合框到ComboBoxContent集合(都在同一個班級)?我已經試過幾件事情,如:

<ComboBox x:Name="linkCombo" ItemsSource="{Binding Path=CollectionToBind }" DisplayMemberPath="Description"> 

我只能夠將它綁定在代碼隱藏文件,並想學習XAML的方式來做到這一點。

謝謝!

回答

0

在這種情況下,我會用ElementToElement結合這樣的: -

<ComboBox x:Name="linkCombo" ItemsSource="{Binding Path=Parent.CollectionToBind, ElementName=LayoutRoot }" DisplayMemberPath="Description"> 

你給ChildWindowLayoutRootx:Name的內容元素(在子窗口的標準模板,這是爲完成您)。因此,您可以綁定到此已命名的元素,並使用其Parent屬性導航到包含ChildWindow

使用DataContext = this很誘人,可以在簡單場景中工作,但在DataContext已經採用這種方式時,在更復雜的需求中可能會遇到困難。

+0

謝謝!奇蹟般有效! – 2010-05-07 21:21:35

0

您需要將ChildWindow的DataContext設置爲包含要綁定到的值的內容。在這種情況下,您要將要綁定的值放在ChildWindow本身上,因此只需在構造函數中放置一行,將該DataContext分配給自己。

DataContext = this; 
0

您也可以在此使用的RelativeSource在XAML綁定,這樣做:

{Binding Path=CollectionToBind, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}} 

然而,一個更好的方式做這將是把CollectionToBind在一個單獨的類,並將其分配給窗口DataContext。現在,Window和XAML Bindings都可以引用與DataContext相同的類,並且可以將更多邏輯分離到此類中,而不是將它放在Window實現中。

+0

我相信FindAncestor只是WPF,而不是Silverlight。 – 2010-05-07 21:21:39

+0

D'oh!我總是缺少Silverlight標籤。 – 2010-05-07 21:42:24