Итак, я уже несколько дней перебираю похожие вопросы по SO.Я просто хочу знать, почему возникает эта проблема.У меня есть класс со свойствами и коллекция SeriesCollection, используемая для живых графиков, которые привязаны к пользовательскому интерфейсу.Поскольку свойства должны иметь возможность сериализации, коллекция SeriesCollection не может быть частью конкретного вида модели (но должна быть привязана к пользовательскому интерфейсу для построения диаграммы).вот так:
public class DLVOModel
{
public SeriesCollection table { get; set; }
public DLVOConfiguration DLVOConfiguration { get; set; }
}
public partial class DLVOModelizer : Window
{
public DLVOModel model { get; set; }
public DLVOModelizer()
{
InitializeComponent();
model = CreateModel();
DataContext = model; //Databinding
}
private DLVOModel CreateModel() => new DLVOModel()
{
DLVOConfiguration = new DLVOConfiguration(),
table = new SeriesCollection(),
};
public class DLVOConfiguration
{
public double HMax { get; set; }
public int Resolution { get; set; }
//... about 25 properties
}
`
XAML:
<window>
<lvc:CartesianChart Series="{Binding Path=table}"/>
<GroupBox DataContext="{Binding DLVOConfiguration}">
<Grid>
<TextBox Text="{Binding Path=HMax, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"/>
<TextBox Text="{Binding Path=Resolution, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</GroupBox>
Так что все работает хорошо, пока я не попытаюсь десериализовать XML-файл.Модель обновляется должным образом, но интерфейс отстает.Текстовые поля обновляются до значения моделей, когда я пытаюсь изменить их текст.Это странно, потому что:
- Привязка данных работает нормально, поэтому интерфейс должен обновляться немедленно.
- При вводе нового значения в пользовательском интерфейсе должно измениться свойство модели, а не пользовательский интерфейс.
(также пробовал версию без UpdateSourceTrigger).
До того, как я подключился напрямую к DLVOConfiguration и все работало нормально.
Я знаю, что есть способ, которымваше представление модели наследуется от INotifyPropertyChanged, но по какой-то причине я столкнулся с той же проблемой.РЕДАКТИРОВАТЬ: я добавил код для случая, в котором я использовал INotifyPropertyChanged из этого вопроса: WPF DataBinding не обновляется?
public class DLVOConfiguration : INotifyPropertyChanged
{
private double _HMax;
public double HMax
{
get { return _HMax; }
set
{
_HMax = value;
NotifyPropertyChanged("HMax");
}
}
private int _Resolution;
public int Resolution
{
get { return _Resolution; }
set
{
_Resolution = value;
NotifyPropertyChanged("Resolution");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}