0

次のようなビューモデルのセットアップがあります

public class cDriveListVM
{
    public string Drive { get; set; }
    public cDriveListVM(string name)
    {
        Drive = name;
    }
}

ウィンドウで観察可能なコレクションを宣言し、そのデータ コンテキストをこの観察可能なコレクションに設定します。

public ObservableCollection<cDriveListVM> DriveList { get; set; }
private void dl()
{
    DriveList = new ObservableCollection<cDriveListVM>();
    DriveList.Add(new cDriveListVM("drive 1"));
    DriveList.Add(new cDriveListVM("drive 2"));
    this.DataContext = DriveList;
}

コンボボックスの XML:

<ComboBox x:Name="Drive_ComboBox" ItemsSource="{Binding Path=Drive}" HorizontalAlignment="Center" IsReadOnly="True" Grid.Column="0" Grid.Row="0" Width="300" Margin="10" SelectionChanged="Drive_Changed" Height="22" VerticalAlignment="Top"/>

Viewmodel の使用方法を学習しているだけなので、何が間違っているのかわかりません。助けていただければ幸いです。次のコンボボックスになるxmlファイルを更新しました。

ここに画像の説明を入力

4

1 に答える 1

3

このコードにはいくつかの問題があります。

1 つ目は、バインディングの設定が間違っていることです。ビューモデル コレクションを持つプロパティはDriveListであるため、バインディングは である必要がありますItemsSource="{Binding Path=DriveList}"

2 つ目は、ビューモデルからフィールドを表示しようとしていますが、これは実行できません。WPF のバインディング エンジンはプロパティでのみ機能するため、viewmodel にはプロパティが必要です。

public string Drive { get; set; }

最後に、DisplayMemberPathはビューモデルのプロパティ名と一致する必要があります: DisplayMemberPath="Drive"

更新:DataContextが観測可能なコレクションそのものであることに気付きました。最初の読み取りで見逃した可能性があります。その場合、データ コンテキストに直接バインドします。

ItemsSource="{Binding}"

表示するプロパティに設定DisplayMemberPathします。

DisplayMemberPath="Drive"
于 2013-08-14T21:11:17.580 に答える