【问题标题】:WPF MVVM View with lookup or join to other entities带有查找或加入其他实体的 WPF MVVM 查看
【发布时间】:2013-07-10 07:14:07
【问题描述】:

我开始使用 WPF 和 MVVM。我正在阅读Code Project Article,这很有趣并且提供了一个很好的快速入门。我正在使用 Entity Framework,很高兴我在 ListView 中列出了我的所有实体。

我很好奇您将如何正确实现查找 - 在视图模型中或创建新模型。以一个人为例。数据结构可能是:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime DateOfBirth { get; set; }
    public Toy FaveToy { get; set; }
}

public class Toy
{
    public string Name { get; set; }
    public string Model { get; set; }
    public string Manufacturer { get; set; }
}

我希望我的列表视图显示 FirstName、LastName、DateOfBirth、Fave Toy、Manufacturer 列。

Toy 字段将是一个组合字符串,其中包含 Name + " " + Model in。

所以给出了我链接的示例中的一些代码(为了示例,我已经敲掉了 Person 类):

视图的基类

public abstract class ViewModelBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;

        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

我的 Person 视图实现

public class PersonViewModel : ViewModelBase 
{
    private ObservableCollection<Person> _Person;

    public PersonViewModel()
    {
        _Person = new ObservableCollection<Person>();

        Entities context = new Entities();

        foreach(var person in context.Person.ToList())
        {
            _Person.Add(person);
        }
    }

    public ObservableCollection<Person> Person
    {
        get
        {
            return _Person;
        }
        set
        {
            _Person = value;
            this.OnPropertyChanged("Person");
        }
    }
}

【问题讨论】:

  • 将您的 ListView 绑定到 Persons 属性,将 Fave Toy 列绑定到 FaveToy.Name 并将制造商绑定到 FaveToy.Manufacturer

标签: wpf entity-framework mvvm


【解决方案1】:

如果我理解正确,您想通过 FaveToy 属性自动访问玩具。

通常这会在 Person 和 Toy 之间创建关系。完成后,您的 Person 实体类型将如下所示:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime DateOfBirth { get; set; }
    public virtual Toy FaveToy { get; set; }
}

请注意 FaveToy 上的“虚拟”。这表示可以通过 person 实例.FaveToy 访问的导航属性。这可以通过点表示法或使用绑定上的路径属性在 XAML 中表示。这是一个讨论导航属性的链接:http://msdn.microsoft.com/en-us/data/jj713564.aspx

如果您想通过名称和模型的组合来表示玩具,那么转换器将在绑定上完成技巧。这是一个讨论转换器的链接http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx

希望这会有所帮助...杰森

PS - Josh Smith 在讨论 WPF 和 MVVM 时表现出色http://joshsmithonwpf.wordpress.com/a-guided-tour-of-wpf/

如果你是一个 VB 人,Alessandro 有我见过的关于 VB 的最佳讨论:http://community.visual-basic.it/Alessandroenglish/archive/2010/08/13/31861.aspx

PSS -- WPF 和 MVVM(或 Windows 8 和 XAML)非常棒。绝对值得您花时间去学习。

【讨论】:

  • 感谢 Jason 提供的信息...周末去看看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
相关资源
最近更新 更多