1

MVVM に比較的慣れていないので、次のような問題があります。

オブジェクト「ユーザー」があります。このオブジェクトは、ユーザー名、電子メールなどのいくつかのプロパティを公開します。mvvm モデルには、次のプロパティがあります。

    private IUser currentUser;
    public IUser CurrentUser
    {
        get
        {
            return this.currentUser;
        }
        set
        {
            this.currentUser = value;
            this.OnPropertyChanged("CurrentUser");
        }
    }

    private void OnPropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

XAML では、TextBox は次のようにバインドされます。

Text="{Binding CurrentUser.Email, Mode=TwoWay}"

電子メール アドレスを変更すると、OnPropertyChanged が起動されないため、他のコード (ICommands など) が「機能」しません。

ユーザーが TextBox のテキストを変更したときに OnPropertyChanged が発生する方法はありますか??

ティア、ポール

4

3 に答える 3

3

CurrentUser が変更されたときに PropertyChanged を起動していますが、現在のユーザーは変更されていません。Email プロパティを変更しているだけです。簡単な解決策として、Email プロパティで CurrentUser の OnChange イベントを伝達することができます。

public string Email
{
    //get
    set
    {
        this.email = value;
        this.OnPropertyChanged("CurrentUser");
    }
}

実際にはうまくいくと思いますthis.OnPropertyChanged("Email")が、 CurrentUser のプロパティを変更しても、そのセッターは確実に呼び出されません。

于 2013-08-28T15:16:35.537 に答える
2

プロパティ変更通知は、IUser クラスのプロパティを監視しません。ViewModel プロパティ CurrentUser (参照) への変更を監視するだけです。

あなたが必要

a) IUser に INotifyPropertyChanged を実装させる

また

b) EmailAddress を引き出して、次のように ViewModel に追加します。

 public string Email
    {
        get
        {
            return this.CurrentUser.Email;
        }
        set
        {
            this.CurrentUser.Email = value;
            this.OnPropertyChanged("Email");
        }
    }
于 2013-08-28T15:17:12.743 に答える
2

INotifyPropertyChanged インターフェイスはどこにありますか? 必要だと思います。

于 2013-08-28T15:16:11.420 に答える