我目前正在学习WPF,C#和MongoDB。 我想进入数据库并将我的_Id显示到列表视图中。 因此,我在主窗口中有一个按钮,当我单击该按钮时,会弹出一个窗口,并显示数据库中所有“ _id”的列表。 我不知道该怎么做,我一直在努力。 在这里:
ConnectionServer
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();
}
}
XML
<Grid>
<ListBox x:Name="listBoxServers" Grid.Row="1" BorderThickness="0"
ItemsSource="{Binding serversList}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock x:Name="textBlockServersId" Text="{Binding
serverId}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
MainWindow
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 }));~
而不是ListOfServers,是serversList(但是我不能从这里访问它)。我的逻辑是将texblock绑定到列表,然后将结果递增到列表。
答案 0 :(得分:0)
除非您正在使用处理PropertyChanged事件的框架,否则您需要自己提高它。即:
private List<Text> _servers;
public List<Text servers
{
get { return _servers;}
set { _servers = value;
OnPropertyChanged(nameof(servers));}}
其他一些注意事项:
DataContext = this;
。
允许使用UserControl作为自己的VM,首先这是一个非常糟糕的设计-请参阅下面的Clemens评论 答案 1 :(得分:0)
项目模板中的文本框已绑定到serverId列表,该列表未在其他地方使用。
相反,它应该绑定到服务器的ID属性,因为列表框中的每个项目都将是serversList ObservableCollection中的服务器之一,因为这就是它绑定到的ItemSource。
调试绑定问题时,它会帮助您在Visual Studio的“输出”窗口中检查调试消息,因为您通常会收到有用的消息(如果很长很复杂)。