c# - 如何选择将哪个 ObservableCollection 绑定(bind)到列表框?

标签 c# wpf binding listbox observablecollection

这可能吗?我有两个 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/

相关文章:

c# - CngKey.Create 不支持请求的操作

c# - 正则表达式 - 忽略空格

wpf - 当 Button.CommandProperty 为空时如何禁用按钮

c# - 如何使用 asp.net 在 GridView 中为页码加下划线

wpf - invokecommandaction使用可以执行吗?

c# - AttachedCommandBehaviour MouseEventargs 作为命令参数

WPF/Silverlight slider 控件显示刻度数

c++ - 数据结构绑定(bind)转换C++

ios - SwiftUI 和数据模型 (CoreData) - 如何更改数据?

c# - 在 C# 和 WCF 中的线程之间共享对象