gpt4 book ai didi

c# - 为什么动态更改的数据未在此处更新 MVVM 绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 10:59:01 26 4
gpt4 key购买 nike

我在 silverlight 中使用 Mvvm 方法。我尝试像这样绑定(bind)文本框:

<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="50"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{Binding ViewModelText}" Grid.Row="0"></TextBlock>
</Grid>

这个 xaml 后面的这个 xaml.cs 类是:
 public partial class UIeLementRender : UserControl
{
public UIeLementRender()
{
InitializeComponent();
this.DataContext = new ViewModel.TabControlStuffViewModel.uiElementRendererViewModel();
}
}

和 viewmodel 类是:
public class uiElementRendererViewModel: GenericViewModel 
{

private String viewModelText;
public String ViewModelText
{
get
{
return viewModelText;
}
set
{
viewModelText = value;
OnPropertyChanged("ViewModelText");
}
}
public uiElementRendererViewModel()
{
this.viewModelText = "Hii from UIelemnt rendering"; //this updated but below one is never updated.
}

public uiElementRendererViewModel(ProgramVersion pv) //This constructor is called dynamically on abutton click from other view model class but it never updates the viewModelText
{
this.viewModelText = "Hii changed UIelemnt rendering";
this.OnPropertyChanged("ViewModelText");
}
}

现在,当我运行代码时,它会显示 "Hii from UIelemnt rendering"; (这是正确的)但是当我动态按下另一个 View 模型类的按钮时,我想将 viewModelText 上的新文本更新为 "Hii changed UIelemnt rendering" .即使我已经完成了 "this.OnPropertyChanged("ViewModelText");" 也没有更新在我的第二个构造函数中。 (它仍然有默认构造函数/不带参数的文本)

如何更新动态获得的这个下一个文本?

最佳答案

您需要设置实际属性,而不是重新初始化整个 ViewModel:

viewModel.ViewModelText = "Hii changed  UIelemnt  rendering";

调用 OnPropertyChanged在您的构造函数中是多余的,因为它将在任何实际绑定(bind)发生之前运行。

如果您 - 必须 - 重新初始化 ViewModel,并且没有办法解决这个问题,那么您还需要重新初始化 View ,或者手动将现有 View 的 DataContext 设置为 ViewModel 类的新实例。

我创建了一些示例文件来说明它是如何完成的: http://pastebin.com/W6Yh7N6E

我将尝试用一个简短的列表来说明 WPF 如何进行数据绑定(bind):
  • 创建 View
  • 创建 ViewModel(实例化、运行构造函数等) - 这是您自己的示例中当前触发事件的位置
  • 将 ViewModel 设置为 DataContext(在您的示例中无论如何都不会发生)
  • WPF 使用当前值更新其绑定(bind)(因此这里不需要另一个 PropertyChanged 事件)

  • 幕后还有很多事情发生,但这些步骤应该足以让您充分理解为什么 PropertyChanged 事件不会在构造函数中执行任何操作。

    关于c# - 为什么动态更改的数据未在此处更新 MVVM 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25646579/

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