Привязка DataContext прерывается после установки другого экземпляра объекта «same» (Equals ()) - PullRequest
0 голосов
/ 26 сентября 2019

Иногда я использую привязку DataContext в UserControls и Panels, когда все дочерние элементы управления отображают данные из одного и того же объекта.Но если я установлю это свойство для нового экземпляра объекта, где два объекта равны (как в их методе Equals возвращает true), элементы управления не привязываются к новому объекту.Кажется, они продолжают отображать и обновлять данные из предыдущего объекта.

В приведенном ниже примере свойство CurrentDeal представляет собой объект Deal, в котором реализован пользовательский метод Equals, который возвращает значение true, если два предложения имеют один и тот же уникальныйидентификатор базы данных.При установке CurrentDeal, сеттер не проверяет равенство.Он всегда устанавливает значение и вызывает событие PropertyChanged.

<Grid DataContext="{Binding CurrentDeal}">
    <TextBox Text="{Binding Price, Mode=TwoWay"} />
</Grid>
private Deal _currentDeal;
public Deal CurrentDeal
{
    get { return _currentDeal; }
    set
    {
        _currentDeal = value;
        NotifyPropertyChanged(nameof(CurrentDeal));
    }
}

Если я установил совершенно иную сделку, то в текстовом поле отображается новая цена сделки, а при обновлении значения в текстовом поле цена новой сделки обновляется, как и ожидалось.

Но если я установлю его на более новый экземпляр "того же" Сделки (то же самое в том, что их методы Equals возвращают true), тогда текстовое поле продолжает показывать старое значение (цена, возможно, изменилась с момента последнегоСделка была показана).Кроме того, изменение значения в текстовом поле не обновляет цену новой сделки (я не проверял, обновляет ли она цену старой сделки, но я предполагаю, что именно так и происходит).

Но, еслиЯ должен был сделать это вместо этого, все работает как ожидалось.

<Grid>
    <TextBox Text="{Binding CurrentDeal.Price, Mode=TwoWay"} />
</Grid>

Очевидно, что если бы я мог сделать это везде, я бы сделал, но моя проблема возникает при использовании многократно используемых UserControls.Я должен установить DataContext, если UserControl должен быть привязан к одному и тому же объекту, но в разных моделях просмотра / просмотра.

Я также не могу просто обновить старую сущность, потому что это сущности Entity Framework из разных контекстов,Это произошло при переходе к решению «новый контекст для каждого запроса», а не к решению «каждая виртуальная среда получает свой собственный контекст».

Честно говоря, я не совсем уверен, что мой вопрос ... этопохоже на ошибку в привязке DataContext.Я не думаю, что это должно принимать во внимание равенство.Когда событие PropertyChanged вызывается для свойства, оно всегда должно связываться с текущими данными, верно?

Но кто-нибудь может увидеть, если я что-то здесь упустил?Кто-нибудь когда-либо имел дело с этим раньше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...