2016-11-23 5 views
0

WPFでは、プロパティの3つのテキストボックス、FullName、FirstName、LastNameを作成します。これらのテキストボックスのテキストは、左のリストボックスに基づいています(下のプログラムイメージに示されています)。私はすでにテキストボックスにリストボックスからテキストを取得して終わりだけど、私は名前ように値を同期したい:どのように相互依存する値を持つプロパティを作成しますか?

のFullNameの値を変更し、リストボックス、姓と名のボックスを変更

と、姓と名の値を変更すると、フルネームを変更し、リストボックスここ

は、プログラムがどのように見えるかです:ジャレッドへ (Program image)

OKおかげで、私は彼の答えに小さな変更を加えることによって、問題を解決することができましたが、私は自分の解決策が好きではないeoneはこのプログラムのより良い改訂を示唆していますか?

class Student : INotifyPropertyChanged 
{ 
    private string name; 
    public string Name 
    { 
     get 
     { 
      return name; 
     } 
     set 
     { 
      FirstName = value.Split(" ".ToCharArray())?[0]; 
      LastName = value.Split(" ".ToCharArray())?[1]; 

      OnPropertyChanged("Name"); 
      OnPropertyChanged("FirstName"); 
      OnPropertyChanged("LastName"); 
     } 
    } 

    private string firstName; 
    public string FirstName 
    { 
     get 
     { 
      return firstName; 
     } 
     set 
     { 
      firstName = value; 
      name = value + " " + LastName; 
      OnPropertyChanged("FirstName"); 
      OnPropertyChanged("Name"); 
     } 
    } 

    private string lastName; 
    public string LastName 
    { 
     get 
     { 
      return lastName; 
     } 
     set 
     { 
      lastName = value; 
      name = FirstName + " " + value; 
      OnPropertyChanged("LastName"); 
      OnPropertyChanged("Name"); 
     } 
    } 

    private Course _course; 

    public Course Course 
    { 
     get { return _course; } 
     set 
     { 
      _course = value; 
      OnPropertyChanged("Course"); 
     } 
    } 


    private int _age; 

    public int Age 
    { 
     get { return _age; } 
     set 
     { 
      _age = value; 
      OnPropertyChanged("Age"); 
     } 
    } 
    private DateTime _birthday; 

    public DateTime Birthday 
    { 
     get { return _birthday; } 
     set 
     { 
      _birthday = value; 
      OnPropertyChanged("Birthday"); 
     } 
    } 



    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 
+0

...それは、返信用 – uhhh

答えて

0

私はあなたが必要とするものは以下のようなクラスであると信じています。リストボックスをこれらのコレクションにバインドし、フォーム要素を現在選択されているアイテムにバインドします。

姓と名の間にスペースを追加しました。削除したい場合は、大文字小文字を区別するなど、名字を分割する別の方法を見つける必要があります。

変更するプロパティに関係なくFullNameが設定されるため、すべてのFirePropertyChanged呼び出しを設定者に設定します。私はこれをテストしていませんが、うまくいくと思います。 :)

EDIT:パブリックプロパティの代わりにfirstNameとlastNameのプライベート変数を設定するようにFullName setterを変更しました。名前の間に不足しているスペースについて

public class Student : INotifyPropertyChanged 
{ 
    public string FullName 
    { 
     get 
     { 
      return FirstName + " " + LastName; 
     } 
     set 
     { 

      firstName = value.Split(" ".ToCharArray())?[0]; 
      lastName= value.Split(" ".ToCharArray())?[1]; 
      FirePropertyChanged("FullName"); 
      FirePropertyChanged("FirstName"); 
      FirePropertyChanged("LastName"); 
     } 
    } 

    private string firstName; 
    public string FirstName 
    { 
     get 
     { 
      return firstName; 
     } 
     set 
     { 
      firstName = value; 
      FullName = value + " " + LastName; 
     } 
    } 

    private string lastName; 
    public string LastName 
    { 
     get 
     { 
      return firstName; 
     } 
     set 
     { 
      lastName = value; 
      FullName = FirstName + " " + value; 
     } 
    } 

    public void FirePropertyChanged (string PropertyName) 
    { 
     PropertyChanged.Invoke(this, new PropertyChangedEventArgs(PropertyName)); 
    } 
    public event PropertyChangedEventHandler PropertyChanged; 
} 
+0

おかげ意図的ではなかったが、悲しいことに、それでStackOverflowException – uhhh

+0

になりかかわらず、あなたの答えに小さな補正を行うことにより、それを解決するために管理。再び、返信のおかげで:) – uhhh

+0

私の悪い。申し訳ありません。一度に10のことを常に行う。 :)私が作った編集は、無限ループを防ぐべきです。 – Jared

関連する問題