2012-04-01 8 views

答えて

2

コレクションにバインドしてコンバーターを使用する代わりに、読み取り専用ItemNamesプロパティを公開できます。 Items.CollectionChangedイベントハンドラでは、私は、グリッドのDataColumnの中にそのプロパティを結合し、カンマ区切りの文字列に変換することのObservableCollectionをIValueConverterを使用していItemNamesプロパティ

public class ViewModel 
{ 

     public ViewModel() 
     { 
      Items = new ObservableCollection<Item>(); 
      Items.CollectionChanged += (o, e) => NotifyPropertyChanged("ItemNames"); 
     } 
     public ObservableCollection<Item> Items { get; private set; } 
     public string ItemNames { get { return String.Join(",", Items); } } 
} 
+0

クラスがsvcutilを使用して作成された場合私はクライアント側で読み取り専用を生成しますか?クライアント側で生成するのではなく、サービスからデータを受け取っている場合はどうなりますか?どこにイベントを付けるのですか? –

+0

また、変更されているコレクションは別のコレクション内にネストされています。 –

+0

私はそれを引数として独自の型を受け入れるコンストラクタを設定し、値をコピーして新しいObservableCollectionを作成し、指定したとおりにNotifyPropertyChanged呼び出しをCollectionChangedイベントにアタッチすることによって機能するようになりました。文字列が更新されます。私はこのようにしてコンストラクタを1回しか使用しないので、新しいコレクションを作成するのが安全です。これが最も効果的な方法であるかどうかはわかりませんが、効果があります。ありがとう、すべて同じ。 –

2

はい、通常はオーバーヘッドのためにそのようなことをしたくないでしょう。 ItemsSourceのコントロールを使用する場合、すべてを再作成せずにCollectionChangedを処理する方法を知っています。

+0

のためのPropertyChangedイベントを発生させます。私は間違いなくこれが私がフィルタリングすることができないように行く方法ではないことを知っている。私はこれが私のクラスの読み取り専用プロパティとして行うことができます知っているどのように私は読み取り専用の文字列プロパティは、変更されました? –

+0

@ChristopherLeach:CollectionChangedイベントにサブスクライブし、その文字列を保持するプロパティのPropertyChangedイベントを発生させるだけです。 –

+0

WCFサービスからクラスが生成されるというヒックアップのみです。私は、読み取り専用の文字列プロパティを持つ部分クラスのクライアント側を生成しようとしましたが、CollectionChangedイベントハンドラをアタッチしていますが、これはサービス全体ではシリアル化されません。新しいクラスでWCFクラスを継承し、そこにイベントをリンクする必要がありますか? –

関連する問題