gpt4 book ai didi

C# 通用应用程序 - 单击时的数据绑定(bind)

转载 作者:太空宇宙 更新时间:2023-11-03 12:56:18 27 4
gpt4 key购买 nike

我在通用应用程序中遇到数据绑定(bind)问题。这是绑定(bind):

<TextBlock x:Name="textBlockOutput" Text="{x:Bind ViewModel.textBlockValue, Mode=TwoWay}" />

当我初始化应用程序时,数据绑定(bind)工作得很好并且 textBlock 项目获得分配字段的值:

 public MainPage()
{
this.InitializeComponent();
this.ViewModel = new MainViewModel();
ViewModel.textBlockValue = "Click the button";
}

不幸的是,当我点击按钮时,textBlock 的值没有被更新。当我调试应用程序时,我可以看到调用了下面的函数,但它没有对 textBlock 进行任何更改。

private void waitBtnClicked(object sender, RoutedEventArgs e)
{
ViewModel.textBlockValue = "Clicked";
SomeMethod();
}

有什么线索吗?

最佳答案

您需要指定 View 可以观察到的属性。因此,您必须从 INotifyPropertyChangedINotifyPropertyChanging 接口(interface)实现您的 ViewModel。比如下构建您的 ViewModel 类:

class MainWindowViewModel : INotifyPropertyChanged, INotifyPropertyChanging
{
private string textBlockValue;

public string TextBlockValue
{
set
{
if (textBlockValue != value)
{
OnPropertyChanging("TextBlockValue");

textBlockValue = value;

OnPropertyChanged("TextBlockValue");
}
}
get
{
return textBlockValue;
}
}
///////////////////////////////////////////////////////

#region INotifyPropertyChanged Members

public event PropertyChangedEventHandler PropertyChanged;

#endregion

#region INotifyPropertyChanging Members

public event PropertyChangingEventHandler PropertyChanging;

#endregion

public void OnPropertyChanging(string propertyName)
{
if (PropertyChanging != null)
PropertyChanging.Invoke(this, new PropertyChangingEventArgs(propertyName));
}

public void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}

比绑定(bind)到您的 XAML:

<TextBlock x:Name="textBlockOutput" Text="{x:Bind ViewModel.TextBlockValue, Mode=TwoWay}" />

因此您只需分配值 throw 属性即可启用 UI 自动更新。

关于C# 通用应用程序 - 单击时的数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33703110/

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