2017-02-23 9 views
1

XAMLのWPF ComboBoxをバインドする際に問題があります。ここでXAMLのリスト<Objects>にWPFコンボボックスをバインドするにはどうすればよいですか?

は私のオブジェクト定義とコレクションです。ここで

public class AccountManager 
{ 
    public long UserCode { get; set; } 
    public string UserName { get; set; } 
} 

public partial class MainWindow : Window 
{  
    public List<AccountManager> AccountManagers; 
} 

が私のComboBoxのXAML定義です:

ComboBox Name="cbTestAccountManagers" 
      ItemsSource="{Binding AccountManagers}" 
      DisplayMemberPath="UserName" 
      SelectedValuePath="UserCode" 
      Width="250" 

私は私がやっている、非常にわからないんだけどここで間違っている。 実行時/読み込み時にエラーは発生しません。 ComboBoxは、ドロップダウンの内容を表示せずに表示されます。 (空です)。

誰かが正しい方向に向かうことができますか?

ありがとうございました

+0

開始のために、第二あなたがプロパティのみ – MikeT

+0

MikeT属性バインドすることはできません動作しますが、public long UserCode; ますもう少し詳しく?私は「属性をバインドすることはできず、プロパティのみをバインドすることはできません。 Thx – JohnB

+0

正しい方向を指すために、すべてのバインディングエラーが出力ウィンドウに報告されますが、ブレークは発生しません。 – MikeT

答えて

0

問題は簡単です。この

public List<AccountManager> AccountManagers { get; set; } 

public List<AccountManager> AccountManagers; 

を変更し、あなたが

public MainWindow() 
{ 
    InitializeComponent(); 
    //Setup Account managers here 
    DataContext = this; 
} 

は、あなただけの特性ではないフィールドにバインドすることができ、あなたのメインウィンドウのコンストラクタでこれらを持っていることを確認してください、あなたは確認する必要があり 適切なデータのコンテキスト

+0

NR:私のコンストラクタで自分のDataContextを設定していませんでした。今はうまく動作します。 – JohnB

+0

私はそれを聞いてうれしい! –

1

あなたはいくつかの間違いをしています

まずあなたが

public class AccountManager 
{ 
    public long UserCode { get; set; } 
    public string UserName { get; set; } 
} 
public class AccountManagersVM 
{ 
    public ObservableCollection<AccountManager> AccountManagers{ get; set; } 

} 

を次のように正しいMVVMが見えるはずです、あなたの背後にあるコードへの変更の必要はちょうど直接設定することができたDataContextを使用する必要はありませんMVVM

をフォローしていませんまたは結合

<Window.DataContext> 
    <local:AccountManagersVM /> 
</Window.DataContext> 
ComboBox ItemsSource="{Binding AccountManagers}" 
      DisplayMemberPath="UserName" 
      SelectedValuePath="UserCode" 
      Width="250" 

第二の属性を経由して/フィールドはプロパティのみ

0をバインドすることはできませんあなたはで説明していただけます。

例えばpublic long UserCode { get; set; }あなたは、観察コレクションを使用してVM上のアカウントマネージャーのリストを持っている必要があり文句を言わない