1

モデルの値を取得してビューモードを作成したい

私のモデルでは

   public class TestElement
    {
     public TestElement CurrentNode { get; set; }
    public TestElement Parent { get; set; }
    }

私はこれを行ういくつかの方法を持っています

    if (thisNode == null)
            {
                thisNode = new TestElement { Name = name, Parent = CurrentNode };
                currentCollection.Add(thisNode);
            }

ビューモデルで TestElementViewModel Parent を作成し、モデルの Parent 値を取得したい

     public class TestElementViewModel
    {

    public TestElementViewModel Parent { get; set; }

この方法で使いたい

      public IEnumerable<TestElementViewModel> ToTreeViewModel(IEnumerable<TestElement> treemodel)
    {
        foreach (TestElementitem in treemodel)
            yield return new  TestElementViewModel
                {
                    Id = item.Id, 
                    Name = item.Name, 
                    Children = ToTreeViewModel(item.Children).ToList(), 
                  Parent = item.Parent
                };
      }

         }

どうすればそれを達成できますか?

4

1 に答える 1

1

あなたのキャスティングエラーはラインで発生していると思います

Parent = item.Parent

TestElementViewModel の Parent プロパティは TestElement タイプではないため、それを行うことはできません。

代わりに、新しい TestElementViewModel を割り当ててみてください。

Parent = new TestElementViewModel { Id = item.Parent.Id, Name = item.Parent.Name, ... }

検討したい改善点の 1 つは、ViewModel クラスでラッパーを使用することです。これにより、プロパティの割り当てが少し簡単になります。

例えば、

public class TestElementViewModel : INotifyPropertyChanged
{
    public TestElementViewModel(TestElement model)
    {
        Model = model;
        if(Model.Parent != null)
            Parent = new TestElementViewModel(Model.Parent);
    }

    public TestElement Model { get; private set; }

    private TestElementViewModel _parent;

    public TestElementViewModel Parent 
    { get { return _parent; }
      set { _parent = value; OnPropertyChanged("Parent"); }
    }

    public int Id
    {
        get { return Model.Id; }
        set { Model.Id = value; OnPropertyChanged("Id"); }
    }

    // rest of the properties need wrapping too
}

新しいビューモデルをインスタンス化するたびにプロパティを手動で割り当てる必要がないようにします。

于 2013-06-12T23:25:49.143 に答える