2010-11-24 19 views
0

(プロバイダがちょうど単一のプロパティ(名前)を備えて非常に単純なクラスです設定Silverlightのリストボックスに項目を選択 - のWindows Phone 7

ProviderList = new List<Provider>(); 
//Populate list 
Providers.ItemsSource = ProviderList; 

次のように私は、ジェネリックリストにバインドされたデータバインドされたリストボックスを持っています。私は問題なく選択した項目を保存することができますが、私はその後、コードから選択した項目を設定するために管理することはできません、私は次のようにそうしようとしています:。

int x = Providers.Items.IndexOf((Provider)_Settings["provider"]); 

しかしIndexOf()はいつも戻っている-1 I場合。実行時にProviders.Items [1]と_Setting ["provider"]の両方を調べます両方とも返信する即時ウィンドウを使用します。

{StoreRetrieveData.Provider} 
Name: "Greenflag" 

私は間違ったことをしていますか?

答えて

1

2つの異なるオブジェクトを同じ値で比較する可能性はありますか?あなたの代わりに次のコードを試すことができます:

Provider provider = (Provider)_Settings["provider"]; 
items.OfType<Provider>().Where(p => p.Name.Equals(provider.Name)); 
+0

私はLINQの構文に慣れていないので、この作業を行うことはできません。 "var test = Providers.Items.OfType ().Where(p => p.Name.Equals(provider.Name));"というコードを使用しています。 – Fishcake

+0

"System.collections ... .Current" - 'System.Collections.Generic.IEnumerable 'に 'System'の定義がなく、拡張メソッド 'System'が定義されていない'System.Collections.Generic.IEnumerable '型の最初の引数が見つかりました(usingディレクティブまたはアセンブリ参照がありませんか?) – Fishcake

+0

.Net 3.5以上を使用している場合は、コードファイルの先頭にSystem.Linqを使用しています。 LINQを使用したくない場合は、代わりにループを使用する必要があります。 – decyclone

1

用途:

ListBox.Items 
    .OfType<ColumnDescriptor>() 
    .FirstOrDefault(c => 
     String.Equals(
      c.Name, 
      ((Provider)_Settings["provider"]).Name, 
      StringComparison.Ordinal)); 
1

あなたは等しく、これが機能するためには、あなたのプロバイダクラスの==演算子をオーバーロードする必要がある場合があります。そうしないと、オブジェクトが異なるインスタンスである場合に比較が失敗します。 http://msdn.microsoft.com/en-us/library/ms173147(v=vs.80).aspx

関連する問題