2008-11-22 115 views
8

我一直在敲我的頭反對這一段時間了。我不確定它爲什麼不起作用。對於整個WPF業務,我仍然很新。WPF綁定到組合框和選擇一個項目

這是我對ComboBox

<ComboBox 
    SelectedValuePath="Type.FullName" 
    SelectedItem="{Binding Path=Type}" 
    Name="cmoBox" /> 

這裏是填充組合框XAML(MyAssembly程序是我用可能的類型的列表創建的類)

cmoBox.ItemsSource = myAssembly.PossibleTypes; 

我設置的DataContext的父ComboBox的元素在後面的代碼中是這樣的:

groupBox.DataContext = listBox.SelectedItem; 

我想綁定g從組合框中選擇正確的「可能的類型」。它不會選擇任何東西。我曾嘗試過SelectedValue和SelectedItem。當我將組合框的DisplayMemberPath更改爲其他屬性時,它改變了顯示的內容,所以我知道它並沒有完全被破壞。

任何想法???

回答

11

在XAML中,設置ItemsSource="{Binding}"和(在後面的代碼中)將DataContext設置爲myAssembly.PossibleTypes

+0

工作很好!謝謝 – 2008-11-22 03:31:18

+0

:)我沒有測試它......但最近我已經進入WPF(由於在工作中使用它)......我想這是100%正確的,或者離開。 – 2008-11-22 03:32:13

12

您也可以在xaml中設置綁定而不是在代碼隱藏中(我們儘可能避免在xaml頁面中隱藏代碼)。我假設是MyAssembly的在你的代碼隱藏控件屬性,併爲您的MyAssembly程序類的一個實例...

<UserControl 
    x:Class="MyNamespace.MyControl" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    DataContext="{Binding}"> 

    <ComboBox 
    Width="200" 
    ItemsSource="{Binding Path=myAssembly.PossibleTypes}" 
    SelectedValuePath="Type.FullName" 
    SelectedItem="{Binding Path=Type}" 
    Name="cmoBox" /> 
</UserControl> 

這可能只是個人喜好,但我認爲這是更好的做法有xaml中的數據綁定,因爲它可以讓您更輕鬆地查看每個控件綁定的內容,而無需掠過代碼隱藏。另外,如果你想從代碼中引用你的ComboBox,你應該在xaml中爲它指定一個x:Name屬性,而不僅僅是Name。

-5

我同意:綁定應該在XAML中。我把......在後面的代碼中完全沒有任何問題。數據源都是可重用的「資源」。 (好吧,代碼隱藏構造函數調用InitializeComponent())。

相關問題