C# 将数据库连接到列表框

C# 将数据库连接到列表框,c#,wpf,mongodb,C#,Wpf,Mongodb,我现在正在学习WPF、C#和MongoDB。 我想转到数据库并在列表视图中显示我的_Id。 因此,我有一个带有按钮的主窗口,当我点击按钮时,弹出窗口,显示数据库中包含我所有“_id”的列表。 我不知道怎么做,我一直在努力。 这是: 连接服务器 public partial class ConnectionServers : UserControl { public List<TextBlock> serverId { get;set; } public Obser

我现在正在学习WPF、C#和MongoDB。 我想转到数据库并在列表视图中显示我的_Id。 因此,我有一个带有按钮的主窗口,当我点击按钮时,弹出窗口,显示数据库中包含我所有“_id”的列表。 我不知道怎么做,我一直在努力。 这是:

连接服务器

public partial class ConnectionServers : UserControl
{
    public  List<TextBlock> serverId { get;set; }

    public ObservableCollection<ConnectionServers> serversList  { get; set;  }

    public String svList { get; set; }

    public ConnectionServers()
    {
        InitializeComponent();
    }
}

serversList代替了ListOfServers(但我无法从这里访问它)。我的逻辑是将一个texblock绑定到一个列表,然后将结果递增到列表。

除非您使用的是一个处理PropertyChanged事件的框架,否则您需要自己引发它。即:

private List<Text> _servers;
public List<Text servers
{
get { return _servers;}
set { _servers = value;
OnPropertyChanged(nameof(servers));}}
private List\u服务器;

public List项目模板中的文本框绑定到serverId列表,该列表在其他地方未使用

相反,它应该绑定到服务器的Id属性,因为列表框中的每个项都是serversList ObservableCollection中的一个服务器,因为这就是它绑定到的ItemSource


调试绑定问题时,在VisualStudio的输出窗口中检查调试消息会有所帮助,因为您通常会收到一条有用的消息(如果很长且很复杂)。

为什么您认为需要UserControl?从主窗口或其他窗口中的列表框开始。如果可行,请执行下一步。您在哪里填充serversList集合?您的列表框绑定到ObservableCollection“serversList”。你在哪里给它添加了值?没错,它将它从UserControl更改为Window。但我仍然不知道如何将数据从该类传递到主窗口。我的逻辑类似于wait collection.Find(new BsonDocument()).ForEachAsync(_id=>listofserver.Add(new connectionserver(){serversList=_id}));服务列表在哪里。Add put servversList.Add,但我无法访问它。我遗漏了什么?我不明白。@Clemens我使用UserControl来创建一个弹出窗口。如果我选择Window标记,则它不起作用UserControl永远不应显式设置其DataContext。这样做以后将破坏其依赖属性的所有基于DataContext的绑定。它甚至不应该有自己的“私有”视图模型。相反,它应该公开依赖属性,并在自己的XAML中使用对这些属性的RelativeSource绑定。项目应显示在文本块中。那我该怎么办?创建一个列表框,绑定它,然后?您有一个列表框,其中包含一个项模板,该模板已经定义了一个TextBlock,并且在Text属性上也有一个绑定。您只需要一个字符串列表,将其绑定为itemSource,然后“Text=“{Binding}”将完成将列表中的每个字符串绑定到项目模板中的textblock的技巧。如果您希望有一些类项的列表,这些类项具有服务器id属性,那么您可以执行类似-Text=“{Binding serverIdProperty}”的操作
  private ObservableCollection<ConnectionServers> listOfServers;

     private  async void dataBaseMongoAsync(string collectionName)
    {

        var client = new MongoClient("mongodb://XXXXXXXX");
        var db = client.GetDatabase("Project");

        var collection = db.GetCollection<BsonDocument>(collectionName);


        await collection.Find(new BsonDocument()).ForEachAsync(_id => ListOfServers.Add(new ConnectionServers() { serversList = _id }));


    }



private void onConnect_Click(object sender, RoutedEventArgs e)
    {

        ConnectionServers availableServers = new ConnectionServers();

        Window serversList = new Window
        {
            Title = "Server List",
            Content = availableServers,
            Height = 300,
            Width = 350,
            Background = FindResource("WindowBackground") as Brush,
            ResizeMode = ResizeMode.NoResize
        };

        serversList.ShowDialog();

    }
 await collection.Find(new BsonDocument()).ForEachAsync(_id => ListOfServers.Add(new ConnectionServers() { serversList = _id }));~
private List<Text> _servers;
public List<Text servers
{
get { return _servers;}
set { _servers = value;
OnPropertyChanged(nameof(servers));}}