C# 将数据库中的数据绑定到WPF MVVM中的视图
您好,我在将数据库中的数据绑定到应用程序中的视图时遇到问题。我创建了一个数据库并通过Entity Framework导入它,这也是一个ViewModel,我在其中创建了与数据库的连接。我想从数据库中获取一个随机数据,并在标签中的视图中显示它。这是我的代码: 视图模型C# 将数据库中的数据绑定到WPF MVVM中的视图,c#,wpf,mvvm,C#,Wpf,Mvvm,您好,我在将数据库中的数据绑定到应用程序中的视图时遇到问题。我创建了一个数据库并通过Entity Framework导入它,这也是一个ViewModel,我在其中创建了与数据库的连接。我想从数据库中获取一个随机数据,并在标签中的视图中显示它。这是我的代码: 视图模型 class TEST : INotifyPropertyChanged { public object RandomWords() { TABUEntities baza = new TABUEnt
class TEST : INotifyPropertyChanged
{
public object RandomWords()
{
TABUEntities baza = new TABUEntities();
baza.HASLA.ToList();
var a = baza.HASLA.OrderBy(x => Guid.NewGuid()).Take(1);
return a;
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
模型数据库
public partial class TABUEntities : DbContext
{
public TABUEntities()
: base("name=TABUEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<HASLA> HASLA { get; set; }
}
公共部分类选项卡:DbContext
{
公共禁忌()
:base(“名称=选项卡”)
{
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
抛出新代码FirstException();
}
公共虚拟数据库集HASLA{get;set;}
}
我的看法呢
<Window x:Class="Tabu.View.TEST"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Tabu.View"
xmlns:vm="clr-namespace:Tabu.ViewModel"
mc:Ignorable="d"
Title="TEST" Height="600" Width="600">
<Window.DataContext>
<vm:TEST/>
</Window.DataContext>
<Grid>
<Label x:Name="label" Content="{Binding }" />
<Label x:Name="label1" Content="{Binding }" />
<Label x:Name="label2" Content="{Binding }" />
<Label x:Name="label3" Content="{Binding }" />
</Grid>
我不知道如何从我的数据库中获取一个随机元素并将其与视图绑定。在标签中,我想从数据库中放入列。有人能给我一个提示吗?如果使用视图模型类的公共属性公开源集合,则可以使用
ItemsControl
如DataGrid
来显示EF表中的项:
public class TEST : INotifyPropertyChanged
{
public TEST()
{
SourceCollection = RandomWords();
}
public System.Collections.IEnumerable SourceCollection { get; private set; }
public object RandomWords()
{
TABUEntities baza = new TABUEntities();
var a = baza.HASLA.OrderBy(x => Guid.NewGuid()).Take(1).ToList();
return a;
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
“Property”是要在
标签中显示的“HASLA”实体的属性名称
是否可以在标签中显示与数据库分离的列?您的OnPropertyChanged
方法可以安全地更改为仅处理程序?。调用(这是新的PropertyChangedEventArgs(名称))。看见
<Window x:Class="Tabu.View.TEST"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Tabu.View"
xmlns:vm="clr-namespace:Tabu.ViewModel"
mc:Ignorable="d"
Title="TEST" Height="600" Width="600">
<Window.DataContext>
<vm:TEST/>
</Window.DataContext>
<Grid>
<DataGrid ItemsSource="{Binding SourceCollection}" />
</Grid>
</Window>
public IList SourceCollection { get; private set; }
<Label x:Name="label1" Content="{Binding SourceCollection[0].Property}" />