这可能吗?我有两个 ObservableCollections。我想用其中之一绑定(bind)并填充列表框。例如,假设我们有 2 个按钮 - 一个用于 Twitter,一个用于 Facebook。单击 Facebook 按钮,它将使用 facebook 可观察集合中的 friend 姓名填充列表框,并将其绑定(bind)。单击 Twitter,它将用 Twitter 关注者填充列表框,并填充列表框并绑定(bind)它。
如何选择将哪个集合填充到列表框中?
最佳答案
我只会使用一个可观察的集合并根据用户的选择进行填充。您还可以用两个来源的名称填充它,并使用一个过滤器来过滤掉其中一个(显然您需要一个包装对象,您可以在其中指示该名称是 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 联系人或混合进行收藏。
另请注意:您不需要通用接口(interface)。如果您只是将 ObservableCollection
设为 object
类型,它也会起作用。但考虑到它们由同一个应用程序显示在同一个列表框中,表明您可以找到某种公共(public)基础,并且可以创建公共(public)接口(interface)或基类。
关于c# - 如何选择将哪个 ObservableCollection 绑定(bind)到列表框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10643116/