C# 将数据库中的数据绑定到WPF MVVM中的视图

C# 将数据库中的数据绑定到WPF MVVM中的视图,c#,wpf,mvvm,C#,Wpf,Mvvm,您好,我在将数据库中的数据绑定到应用程序中的视图时遇到问题。我创建了一个数据库并通过Entity Framework导入它,这也是一个ViewModel,我在其中创建了与数据库的连接。我想从数据库中获取一个随机数据,并在标签中的视图中显示它。这是我的代码: 视图模型 class TEST : INotifyPropertyChanged { public object RandomWords() { TABUEntities baza = new TABUEnt

您好,我在将数据库中的数据绑定到应用程序中的视图时遇到问题。我创建了一个数据库并通过Entity Framework导入它,这也是一个ViewModel,我在其中创建了与数据库的连接。我想从数据库中获取一个随机数据,并在标签中的视图中显示它。这是我的代码:

视图模型

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}" />