gpt4 book ai didi

c# - View 不会随着 viewModel 的变化而更新

转载 作者:太空宇宙 更新时间:2023-11-03 23:13:40 25 4
gpt4 key购买 nike

我有一个名为 SensorControl 的用户控件,我想将其 dataContext 绑定(bind)到名为 SensorModel 的 viewModel 类。绑定(bind)成功并且 viewModel 的初始值 在 userControl 中可见,但问题是当我更改 viewModel 的属性时,userControl 不会更新,我必须手动更新它(通过将 null 分配给它的 dataContext 并再次分配 viewModel)。这是我的代码的一个简化示例。

传感器控制.xml:

<UserControl ...[other attributes]... DataContext={Binding Model}>
.
.
.
<Label Content="{Binding Title}"/>
.
.
.
</UserControl>

SensorControl.xml.cs(代码隐藏):

public partial class SensorControl : UserControl
{
public SensorModel model;

public SensorModel Model
{
get { return model; }
set { model = value; }
}
public SensorControl(SensorModel sm)
{
Model = sm;
}
}

主窗口.xml.cs:

public partial class MainWindow : Window
{
public SensorModel sensorModel_1;
public SensorControl sensorControl_1;

public MainWindow()
{
InitializeComponent();
sensorModel_1 = new SensorModel(...[some arguments]...);
sensorControl_1 = new SensorControl(sensorModel_1);
mainGrid.Children.Add(sensorControl_1);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
sensorModel_1.Title = "myTitle";
//The UserControl does not update
}

0) 我在 SensorModel 中实现了 INotifyPropertyChanged

1) 我需要这个的原因是,在我的项目中只有一个“传感器”概念(它是一个真正的电子传感器),因此我有一个模型(处理真正的传感器) 、数据库等),但在 UI 中,我有多个 userControls 用于呈现 Sensor 的不同方面。所以我必须为每个真实传感器创建一个模型实例 (SensorModel),并且多个 userControls 必须绑定(bind)到它(每个都使用模型的不同部分)。

2) 我不是 WPF 的新手,但我是 MVVM 的新手,我可能误解了一些重要的东西,所以如果有人能清楚地解释正确的方法,我将不胜感激。

提前致谢

最佳答案

在您的 UserControl 中,删除 DataContext 属性并添加一个 x:Name 属性。然后在您的标签中,像这样绑定(bind):

<UserControl x:Name="uc">
<Label Content="{Binding ElementName=uc,Path=Model.Title}" />
</UserControl>

我认为问题是无法将 DataContext 设置为模型,因为绑定(bind)会脱离父级的 DataContext,当它作为子级添加到其中时,父级的 DataContext 将基于 mainGrid。由于 maiGrid 的 DataContext 中不存在属性“Model”,因此不会发生任何绑定(bind),因此您的更新不会反射(reflect)出来。正确获取 UserControl 的 DataContext 可能很棘手。我经常使用 ElementName 或在 UserControl 上创建 DependencyProperties,然后从将使用该控件的父级设置它们。

关于c# - View 不会随着 viewModel 的变化而更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38023750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com