我正在努力解决更新对象时文本框应如何自动更改其值。我有一个带有名称和值的温度类。
public class Temperature
{
public string Name { get; set; }
public double Value { get; set; }
}
在InitializeComponent()之后的MainWindow.xaml.cs中,我创建了一个 ObservableCollection _lstTempObs =新的ObservableCollection();然后添加一个初始温度对象。
在主窗口中,我有一个文本框
<TextBox x:Name="T1" Text="{Binding Path=Value}" HorizontalAlignment="Left" Height="23" Margin="215,55,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
然后在MainWindow.xaml.cs中,将datacontext设置为 T1.DataContext = _lstTempObs.LastOrDefault(); 温度更新来自API。当获得mew Temperature对象时,将其添加到ObservableCollection中,但在GUI中该值不变。
public partial class MainWindow : Window
{
ObservableCollection<Temperature> _lstTempObs = new ObservableCollection<Temperature>();
public MainWindow()
{
InitializeComponent();
_lstTempObs.Add(new Temperature { Name = "T1", Value = "0.321" });
T1.DataContext = _lstTempObs.LastOrDefault();
}
}
答案 0 :(得分:0)
您需要实现一种通知机制,用于通知UI数据更改。 在WPF中,通常使用INotifyPropertyChanged接口完成此操作。 请查看此answer,以获得有关如何执行此操作的基本参考。
在实际情况下,我将在基类中实现INPC接口
public class INPCBase : INotifyPropertyChanged
{
public bool SetField<U>(ref U field, U value, [CallerMemberName] string propertyName = null)
{
if (field == value))
{
return false;
}
field = value;
OnPropertyChanged(propertyName);
return true;
}
public event PropertyChangedEventHandler PropertyChanged;
public virtual void OnPropertyChanged([CallerMemberName]string propertyName = "")
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs(propertyName);
handler(this, e);
}
}
}
用法:
public class Temperature : INPCBase
{
private string name;
public string Name { get; set{base.SetField(ref name, value); } }
private double val;
public double Value { get; set{base.SetField(ref val, value); } }
}