ユーザーの選択に基づいて、1つの監視可能なコレクションと塗りつぶしを使用します。また、両方のソースからの名前を入力し、どちらか一方を除外するフィルターを設定することもできます(名前がFacebookの友達かTwitterのフォロワーかを示すことができるラッパーオブジェクトが必要なようです)。
編集:これはあなたがそれを行うことができる方法のいくつかの簡単なコード例です:
public interface ISocialContact
{
string Name { get; }
}
public class FacebookContact : ISocialContact
{
public string Name { get; set; }
public string FacebookPage { get; set; }
}
public class TwitterContact : ISocialContact
{
public string Name { get; set; }
public string TwitterAccount { get; set; }
}
次に、データコンテキストで:
public ObservableCollection<ISocialContact> Contacts { get; set; }
...
Contacts = new ObservableCollection<ISocialContact> {
new FacebookContact { Name = "Face", FacebookPage = "book" },
new TwitterContact { Name = "Twit", TwitterAccount = "ter" }
};
そしてあなたのxamlで:
<Grid>
<Grid.Resources>
<DataTemplate DataType="{x:Type local:FacebookContact}">
<TextBlock Text="{Binding FacebookPage}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type local:TwitterContact}">
<TextBlock Text="{Binding TwitterAccount}"/>
</DataTemplate>
</Grid.Resources>
<ListBox ItemsSource="{Binding Contacts}" Width="100" Height="100"/>
</Grid>
これにより、コレクション内の各オブジェクトに適切なテンプレートが適用されます。したがって、Facebookの連絡先のみ、Twitterの連絡先のみ、または混合してコレクションを作成できます。
また、注意:共通のインターフェースは必要ありません。ObservableCollection
タイプを作成するだけでも機能しますobject
。ただし、同じリストボックス内の同じアプリによって表示されていることを考えると、ある種の共通ベースを見つけることができ、comonインターフェイスまたはベースクラスを作成できることを示しています。