Иногда я использую привязку 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 вызывается для свойства, оно всегда должно связываться с текущими данными, верно?
Но кто-нибудь может увидеть, если я что-то здесь упустил?Кто-нибудь когда-либо имел дело с этим раньше?