0

私のMVVMテストプロジェクトでは、テキストボックスをビューモデルのオブジェクトにバインドしたいと考えています:

public class ContactViewModel : BaseNotifyPropertyChanged
{
    Contact _selectedItem;

    public ContactViewModel()
    {
        ContactModel contactModel = new ContactModel();
        _selectedItem = contactModel.ContactList[1];  // this contains first contact from the list; 
    }
}

public Contact SelectedContact
{
    get
       {
          return _selectedItem;
       }
}

私の Contact クラスでは、最初の連絡先の名を表示するために ToString メソッドをオーバーライドしています。

public override string ToString()
{
   return _firstName.ToString();
}

そして、これが私の XAML バインディングです。

<TextBox Height="23" HorizontalAlignment="Left" Name="SelectedItemTextBox" Text="{Binding Path=SelectedContact}" VerticalAlignment="Top" Width="120" />

そして、何らかの理由で、このテキストボックスは常に空です。しかし、私が変わると

public String SelectedContact
{
    get
       {
          return _selectedItem.LastName;
       }
}

それは完全に機能します。

4

3 に答える 3

1

MSDN のこの記事に従ったと思います: http://msdn.microsoft.com/en-us/library/ms742521%28v=vs.110%29.aspx

この記事では、ListBox の標準表現はその内容の ToString 表現のリストであると述べていますが、これは他のすべての要素には当てはまりません。

Contact クラスの DataBinding テンプレートを作成することを強くお勧めします。これは、ToString をオーバーライドするよりも、この動作を実装するためのはるかにクリーンな方法です。

于 2013-11-13T21:02:24.863 に答える
0

ああ、見つけました。TextBox を TextBlock に変更するだけで、すべてが正常に機能するようになりました。

TextBlock はオブジェクトの表示方法を理解しているようですが、TextBox は理解していません。

于 2013-11-13T20:58:21.170 に答える