0

私はWPFとMVVMを使い始めています。コード プロジェクトの記事を読んでいるところです。これは非常に興味深いもので、すぐに始めることができます。私は 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");
        }
    }
}
4

1 に答える 1

0

私の理解が正しければ、 FaveToy プロパティを介して Toy に自動的にアクセスしたいと考えています。

通常、これは 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 の「仮想」に注目してください。これは、人物インスタンス.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) は素晴らしいです。時間をかけて手に入れる価値は間違いありません。

于 2013-07-11T21:28:33.933 に答える