c# - 在另一个类中更改 ViewModel 属性不会更新 UI
问题描述
我在一个更复杂的应用程序中遇到了这个问题,所以我构建了一个简单的应用程序来测试它。但首先是代码,这是一个简单应用程序的奇怪布局,但请记住,这模仿了我的其他应用程序。
注意,Baseviewmodel 继承自 basemodel。
主页
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage x:Class="TestINotify.MainPage"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:TestINotify">
<ContentPage.BindingContext>
<local:MainPageViewModel />
</ContentPage.BindingContext>
<StackLayout>
<!-- Place new controls here -->
<Label HorizontalOptions="Center"
Text="Welcome to Xamarin.Forms!"
VerticalOptions="CenterAndExpand" />
<Label HorizontalOptions="Center"
Text="{Binding LabelTextProperty}"
VerticalOptions="CenterAndExpand" />
<Button Command="{Binding ChangeTextCommand}" Text="Change Label Text" />
</StackLayout>
</ContentPage>
MainPageViewModel
public class MainPageViewModel : BaseViewModel
{
public ICommand ChangeTextCommand { private set; get; }
private string _labelText = "Default text" ;
public string LabelTextProperty
{
get
{
return _labelText;
}
set
{
_labelText = value;
OnPropertyChanged();
}
}
public MainPageViewModel()
{
ChangeTextCommand = new Command(execute: () =>
{
var handler = new ChangeTextClass();
handler.ChangeTexts();
});
}
}
更改文本类
public class ChangeTextClass
{
public MainPageViewModel mpvm = new MainPageViewModel();
public void ChangeTexts()
{
mpvm.LabelTextProperty = "The Text Was Changed ?";
}
}
基本模型
public abstract class BaseModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
当我在视图模型中分配标签的文本值时
ChangeTextCommand = new Command(execute: () =>
{
LabelTextProperty = "Local works";
});
它工作正常,但是,所以也许这与我在类中创建视图模型的新实例有关?
解决方案
推荐阅读
- amazon-web-services - AWS s3 同步从 s3 复制到 EMR 很慢
- vb.net - VB.NET 列表视图委托
- node.js - 如何确定 NPM 包是实现 ES5 还是 ES6 模块?
- docker - dotnet restore 使用 docker Jenkins 容器失败
- jquery - 为什么这个 jquery 方法不返回 SELECTED 值?
- javascript - Node Js,多次调用导出的函数
- python-3.x - 如何在给定增长率和特殊规则的情况下获得 pandas 的累积增长?
- css - Ruby on Rails 6 -- 使用 Webpacker 和 Bootstrap 在局部视图上没有 CSS
- javascript - 如何使用引用另一个目录中的 API 的变量?
- snowflake-cloud-data-platform - Snowflake DROP TABLE table_name(...)