2017-02-13 8 views
0

オブジェクトのリスト(ObservableCollection subjectlist)があり、データバインドおよび依存プロパティを使用してそれらをコンボボックスに表示したいとします。データバインディングObservableCollection <T>とComboBoxは依存関係プロパティでは機能しません

WPF Data Binding to a Combo Box

私はstackoverflowの上で検索し、上記のリンクにクレイグSuchanecのソリューションを実装しようとしました。 (今終日しようと、私はちょうど私のコードで間違っているものを得ることはありません)これがあれば作業を行い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> 

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

I DataContextを設定し、依存関係のないプロパティを設定するだけですが、データバインディングの依存関係プロパティを使用しようとすると、それは私の実装とリンクで指定されたソリューションとの間に大きな違いはありません。

誰かがこの問題で私を助けることができれば幸いです。

+0

スクリーンショットではなく、実際のコードを質問に投稿してください。コードの書式設定は簡単で、4つのスペースでインデントするだけです。 – Clemens

答えて

0

実際にSubjectListプロパティの値を設定しているコードのどこにも表示されません。

ただし、subjectListの値を設定していますが、SubjectListにバインドしています。ケーシングの違いに注意してください。

+0

おはよう、ありがとう!私は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を使用しない場合でも、それは動作します注意してください。ただし、を実装する場合は、ElementNameに設定してください。

+0

ありがとうございます。コンストラクタでsubjectListをSubjectListに変更し、アクセサーを編集しました。今それは働いている! – morrismoss

関連する問題