0

ここから同じ質問を見つけることができます。私はすべての方法を試しました。しかし、どれも私の問題を解決しませんでした。したがって、これを重複としてマークしないでください。

これが私がやろうとしていることです。文字列リストがあり、リスト項目をコンボボックスにバインドしたいと考えています。

私がここでやっている何が間違っているのかを見つけるのを手伝ってくれませんか。

XAML

<ComboBox Name="comboBox1" ItemsSource="{Binding AvailableTypes}" DataContext="{Binding AvailableTypes}"/>  

.cs ファイル

    ObservableCollection<string> availableTypes = new ObservableCollection<string>();

    public ObservableCollection<string> AvailableTypes { get { return availableTypes ; } }

    public Window1()
    {            
        InitializeComponent();
        availablePayTypes.Add("Type1");  
        availablePayTypes.Add("Type1");           
    }  

データはコンボボックスにバインドされません。次のようにするとうまくいきます。

comboBox1.ItemsSource=AvailableTypes;  

私のコードの何が問題なのですか。私を助けてください。

ありがとうございました。

4

2 に答える 2

2

少なくとも 2 つの問題があります。まず、タイプミスがあります。プロパティ名と一致するItemsSource="{Binding AvailablePayTypes}"必要があります。AvailableTypes

DataContext次に、と の両方を設定する必要はありませんItemsSource。通常DataContext、XAML ルートの をコード ビハインド クラスに設定してから、 を使用しますItemsSource="{Binding AvailableTypes}"

コード ビハインドから DataContext を設定できることに注意してください。

public Window1()
{            
    InitializeComponent();
    availablePayTypes.Add("Type1");  
    availablePayTypes.Add("Type1");           
    LayoutRoot.DataContext = this;
}  

または、次を使用して XAML 自体からRelativeSource:

<UserControl
    DataContext="{Binding RelativeSource={RelativeSource Self}}" />
于 2012-11-29T07:31:30.130 に答える
1

DataContext と ItemsSource バインディングの組み合わせが正しくありません。

これはうまくいきます:

<ComboBox Name="comboBox1" ItemsSource="{Binding AvailableTypes}" /> 

そしてあなたのコンストラクターで:

public Window1()
{            
    InitializeComponent();
    DataContext = this; // <--
    availablePayTypes.Add("Type1");  
    availablePayTypes.Add("Type1");           
}  

ここで何が起こっているのですか?

  1. AvailablePayTypesコレクションの名前が にバインドされていAvailableTypesます。
  2. DataContext を にバインドしていAvailablePayTypesます。ただし、ウィンドウ自体に DataContext が設定されていないため、これは機能しません。そのため、WPF はどこを探すべきかわかりませんAvailablePayTypes
  3. ItemsSource を にバインドしていAvailablePayTypesます。AvailablePayTypes以前の DataContext のバインドが機能したとしても、WPF はcollection で名前が付けられたプロパティを探すようになりますAvailablePayTypes。これは明らかに間違っています。

コードに次の変更を加えました。

  1. タイプミスを修正
  2. Window から継承されるように、ComboBox の DataContext のバインディングを削除しました。
  3. Window のコンストラクターで、DataContext をそれ自体に設定します。
于 2012-11-29T07:31:01.200 に答える