2017-02-13 61 views
0

我有對象的列表(的ObservableCollection subjectlist),並希望通過數據綁定和依賴屬性的組合框來顯示他們的工作。數據綁定與組合框的ObservableCollection <T>不依賴項屬性

WPF Data Binding to a Combo Box

我搜索了計算器,並試圖實現克雷格Suchanec在上面的鏈接的解決方案。 (試過了一整天,現在我只是不明白這有什麼錯我的代碼)

MainWindow.xaml.cs

public partial class MainWindow : Window 
{ 
    public static readonly DependencyProperty SubjectListProperty = 
     DependencyProperty.Register("SubjectList", 
     typeof(ObservableCollection<Subject>), 
     typeof(MainWindow)); 



    private ObservableCollection<Subject> subjectList = new ObservableCollection<Subject>(); 
    Initialization init1; 


    public ObservableCollection<Subject> SubjectList 
    { 
     get { return (ObservableCollection<Subject>)GetValue(SubjectListProperty); } 
     // get { return subjectList; } 

    } 


    public MainWindow() 
    { 
     init1 = new Initialization(); 
     subjectList = init1.createMenuSubject(); 

     InitializeComponent(); 
     //this.comboBox.DataContext = SubjectList; 
    } 
} 

MainWindow.xaml

<Grid> 

    <ComboBox x:Name="comboBox" HorizontalAlignment="Left"VerticalAlignment="Top" Width="120" Margin="321,10,0,0" 
          ItemsSource="{Binding ElementName=mainWindow, Path=SubjectList}" DisplayMemberPath="Name"/> 

    </Grid> 

它的工作,如果我只需設置DataContext並在不依賴屬性的情況下工作,但只要我嘗試使用依賴項屬性進行數據綁定,它就沒有,我也沒有看到我的實現和鏈接中給出的解決方案之間的顯着差異。

如果有人能夠幫助我解決這個問題,我們將非常感激。

+0

請發佈您的問題的實際代碼,而不是截圖。代碼格式很簡單,只需縮進四個空格。 – Clemens

回答

0

我看不到任何地方你的代碼實際上是設置SubjectList屬性的值。

然而,您正在設置subjectList的值,但您綁定到了SubjectList。注意套管的差異。

+0

Omg,謝謝!我將subjectList更改爲SubjectList並編寫了一個集合。現在它正在工作。 – morrismoss

0

你應該寫:的

public ObservableCollection<Subject> SubjectList 
    { 
     set { base.SetValue(SubjectListProperty, value); } 
     get { return (ObservableCollection<Subject>)base.GetValue(SubjectListProperty); } 
    } 

代替

public ObservableCollection<Subject> SubjectList 
    { 
     set { base.SetValue(SubjectListProperty, value); } 
     get { return subjectList; } 
    } 

或任何其他特設格式。您正在設置subjectList在您的構造函數MainWindow(),但是,它不會設置值SubjectList(與大寫字母S)和屬性更改事件永遠不會引發。刪除subjectList

如果你想知道爲什麼的DataContext方法工作,你要注意它會工作,即使你不使用DepenedencyProperty。但是,如果您實施INotifyPropertyChange,則它也可以與設置元素名稱一起使用。

+0

非常感謝。我在構造函數中將subjectList更改爲SubjectList並編輯訪問器。現在它正在工作! – morrismoss