是否可以使用 MVVM 从视图修改视图模型中的属性? [复制]
Posted
技术标签:
【中文标题】是否可以使用 MVVM 从视图修改视图模型中的属性? [复制]【英文标题】:Is it possible to modify a property in the view model from the view using MVVM? [duplicate] 【发布时间】:2021-12-20 12:37:21 【问题描述】:在避开 MVVM 数周后,我终于决定再试一次。在我看来,我想要实现的目标相对简单。我想缩小一个框架,更新框架内的文本,然后再次将框架放大到正常大小
在我的代码隐藏中,我有一个方法可以在点击框架时将框架缩放到 0.1。我在后面的代码中将此作为手势识别器,因为我的理解是动画必须在视图中。
在我的 ViewModel 中,我有一个名为 FrameText 的属性。这是我要更新的值。我想在扩展之前更新属性。所以这就是我想出的。
>await TestFrame.ScaleTo(0.1, 60, Easing.Linear);
>ViewModels.MainViewModel.FrameText = "new text";
>await TestFrame.ScaleTo(1, 60, Easing.Linear);
我很快意识到这是有缺陷的,但在花了几个小时试图了解 MVVM 的工作原理后,我认为最好还是问一下。我不应该在这里使用 MVVM 吗?我是否误解了 MVVM 的工作原理?提前谢谢你。
【问题讨论】:
“缩小框架,更新框架内的文本,然后放大框架”——这听起来像是与底层数据无关的 UI 操作。 @Jason 感谢您的评论,但我想我误解了一些东西。我在后面的代码中有缩小框架和放大框架的操作,因为它们是 UI 操作。我想更新两个动画之间的文本,但属性在我的 ViewModel 中。我将如何从视图中修改 ViewModel 中的属性,以便它发生在两个动画之间?我是在错误地处理整个事情,还是应该干脆不使用 MVVM 和不同的方式来绑定数据?我是使用 MVVM 的新手,因此我们将不胜感激。 为什么不在虚拟机中公开一个在动画完成时触发的命令,并且会更新文本? 我该怎么做?我有一个可以更新文本的命令,但我不知道在动画完成后如何触发它。我知道如何从 XAML 触发命令,但我不知道可以从代码隐藏触发命令 ***.com/questions/10126968/… 【参考方案1】:我看不到其他代码,但一般来说,如果我们想在更改绑定到视图的属性的值后更新 UI,我们可以让我们的 ViewModel 实现接口INotifyPropertyChanged
。实现此接口的类通常会在其公共属性之一更改值时触发事件。
请参考以下代码:
public class MainViewModel: INotifyPropertyChanged
string _frameText;
public string FrameText
set SetProperty(ref _frameText, value);
get return _frameText;
bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = null)
if (Object.Equals(storage, value))
return false;
storage = value;
OnPropertyChanged(propertyName);
return true;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
public event PropertyChangedEventHandler PropertyChanged;
更多信息,请查看:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/data-binding/binding-mode#viewmodels-and-property-change-notifications
【讨论】:
嗨@foxre,我已经有几天没有收到你的消息了。如果有什么我可以在这里提供帮助的,请告诉我。以上是关于是否可以使用 MVVM 从视图修改视图模型中的属性? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
当我尝试使用 MVVM WPF 中的命令修改对象时,为啥在视图模型中出现空错误?
iOS:如何使用 MVVM 将模型从视图模型传递到视图模型?