C# 如何在viewModel中使用模型
我在Xamarin项目中使用MVVM时遇到问题 如果更新了viewModel中的某个对象(例如,在PUT请求之后),则无法刷新用户界面 让我解释一下: 我的模型:C# 如何在viewModel中使用模型,c#,mvvm,xamarin.forms,C#,Mvvm,Xamarin.forms,我在Xamarin项目中使用MVVM时遇到问题 如果更新了viewModel中的某个对象(例如,在PUT请求之后),则无法刷新用户界面 让我解释一下: 我的模型: public class MyObject { public string Id { get; private set; } public string Name { get; private set; } } 我的viewmodel: public class MyViewModel : BaseViewModel
public class MyObject
{
public string Id { get; private set; }
public string Name { get; private set; }
}
我的viewmodel:
public class MyViewModel : BaseViewModel
{
public MyObject MyObject { get; private set; }
public string IdMvvm
{
set
{
if (this.MyObject.Id != value)
{
MyObject.Id = value;
OnPropertyChanged(nameof(IdMvvm));
}
}
get { return MyObject.Id; }
}
public string NameMvvm
{
set
{
if (this.MyObject.Name != value)
{
MyObject.Name = value;
OnPropertyChanged(nameof(NameMvvm));
}
}
get { return MyObject.Name; }
}
}
BaseViewModel实现INotifyPropertyChanged
public class BaseViewModel : INotifyPropertyChanged
{
public string PageTitle { get; protected set; }
LayoutViewModel() {}
// MVVM ----------------------------------------------------------------------------------------
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
protected void SetValue<T>(ref T backingField, T value, [CallerMemberName] string propertyName = null)
{
if (EqualityComparer<T>.Default.Equals(backingField, value))
return;
backingField = value;
OnPropertyChanged(propertyName);
}
公共类BaseViewModel:INotifyPropertyChanged
{
公共字符串PageTitle{get;protected set;}
LayoutViewModel(){}
//MVVM----------------------------------------------------------------------------------------
公共事件属性更改事件处理程序属性更改;
受保护的OnPropertyChanged无效([CallerMemberName]字符串propertyName=null)
{
PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(propertyName));
}
受保护的void SetValue(ref T backingField,T value,[CallerMemberName]字符串propertyName=null)
{
if(EqualityComparer.Default.Equals(backingField,value))
返回;
backingField=值;
OnPropertyChanged(propertyName);
}
MyViewModel被定义为我的页面的BindingContext
我的属性IdMvvm和NameMvvm在xaml中绑定在我的页面的条目中
当我修改一个条目时,该值会被提升,但如果我的MyModel对象更改了值,例如更新(单击按钮),则不同条目的值不会被更新
你能帮帮我吗?因为我好像错过了什么。。。
如果你需要更多的解释,告诉我
很抱歉,如果我的英语不好那是因为当您更改模型时,您的视图没有意识到更改。请更新代码,以便在模型更改时明确通知属性更改
public class MyViewModel : BaseViewModel
{
private MyObject _myObject;
public MyObject MyObject
{
get { return _myObject; }
private set { _myObject = value; NotifyModelChange(); }
}
public string IdMvvm
{
set
{
if (this.MyObject.Id != value)
{
MyObject.Id = value;
OnPropertyChanged(nameof(IdMvvm));
}
}
get { return MyObject.Id; }
}
public string NameMvvm
{
set
{
if (this.MyObject.Name != value)
{
MyObject.Name = value;
OnPropertyChanged(nameof(NameMvvm));
}
}
get { return MyObject.Name; }
}
private void NotifyModelChange()
{
OnPropertyChanged(nameof(IdMvvm));
OnPropertyChanged(nameof(NameMvvm));
}
}
最好的方法:MyViewModel不包含模型。请使用AutoMapper将您要显示的属性从模型映射到ViewModel谢谢您的答复。我也会从这方面看。