3

エンティティに LINQ-to-SQL を使用して Windows Phone 8 アプリを作成しています。私の現在の実装では、単純な INotifyPropertyChanging/INotifyPropertyChanged メソッドを使用しています。

[Table]
public class Item : INotifyPropertyChanged, INotifyPropertyChanging
{
    private int _itemId;

    [Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", AutoSync = AutoSync.OnInsert)]
    public int ItemId
    {
        get { return _itemId; }
        set
        {
            if (_itemId != value)
            {
                NotifyPropertyChanging("ItemId");
                _itemId = value;
                NotifyPropertyChanged("ItemId");
            }
        }
    }

    [Column]
    internal int? _groupId;

    private EntityRef<Board> _group;

    [Association(Storage = "_group", ThisKey = "_groupId", OtherKey = "GroupId", IsForeignKey = true)]
    public Group Group
    {
        get { return _group.Entity; }
        set
        {
            NotifyPropertyChanging("Group");
            _group.Entity = value;

            if (value != null)
            {
                _groupId = value.BoardId;
            }

            NotifyPropertyChanging("Group");
        }
    }
}

プロパティセッターを新しいメソッドに変更したいのですが、ここに設立しました:http://danrigby.com/2012/04/01/inotifypropertychanged-the-net-4-5-way-revisited/

protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName] String propertyName = null)
{
    if (object.Equals(storage, value)) return false;

    this.OnPropertyChanging(propertyName);
    storage = value;
    this.OnPropertyChanged(propertyName);
    return true;
}

ItemIdのようなプロパティに実装するのは簡単ですが、 GroupIdにを設定する必要があり、 _group.Entity にこれを参照として渡すことができないため、実装方法がわかりません。

これは私の回避策です (まだテストされていません) が、PropertyChanging/PropertyChanged イベントが早期に発生すると思います。

    public Group Group
    {
        get { return _group.Entity; }
        set
        {
            var group = _group.Entity;

            if (SetProperty(ref group, value))
            {
                _group.Entity = group;

                if (value != null)
                {
                    _groupId = value.GroupId;
                }
            }
        }
    }

この問題の明確な解決策はありますか?

4

1 に答える 1