因此,我几天以来一直在仔细研究类似的问题。我只想知道为什么会出现此问题。我有一个带有属性的类和一个用于实时图表的SeriesCollection,它们已绑定到UI。由于属性需要能够序列化,因此SeriesCollection不能成为特定模型视图的一部分(但需要绑定到UI来绘制图表)。像这样:
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文件之前,这一切都很好。该模型已正确更新,但UI落后。当我尝试更改其文本时,textboxxes将更新为模型值。这很奇怪,因为:
(也尝试了没有UpdateSourceTrigger的版本)。
在我直接绑定到DLVOConfiguration之前,一切正常。
我知道您的模型视图可以从INotifyPropertyChanged继承,但是由于某种原因,我遇到了同样的问题。 编辑: 我为这个问题使用INotifyPropertyChanged的情况添加了代码: WPF DataBinding not updating?
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));
}
答案 0 :(得分:0)
我猜您正在替换绑定到某处的实例。这破坏了数据绑定。只要您仅使用新值更新属性,它就可以正常工作。