Model-View-ViewModel(MVVM)是一种架构设计模式,用于实现用户界面,通过其表示逻辑(其ViewModel)将UI(View)与其数据(Model)分开。
此桌面应用程序的业务要求是某些视图上存在通用筛选器选项。这意味着对于那些包含常见过滤器选项的视图,如果我检查某些选项...
当后台工作人员在 WPF 项目 (MVVM) 中工作时更新 UI
在我的WPF项目中,我需要将大量SQL数据传输到数据网格。自然是等的时间长了。我使用了MVVM模式。 为了使 UI 响应更快,我使用了后台工作者。但是屏幕
如何从 ViewModel 获取 CollectionView.SelectedItems
我想从视图模型中的 CollectionView 获取所选项目。 我尝试将 SelectedItems 绑定到视图模型中 ObservableCollection 类型的属性,并将模式设置为 Two...
错误:检测到一个或多个重复的文件名。所有图像文件名必须是唯一的:edupay (Resources\AppIcon dupay.png
我有一个使用 .NET 6 构建的 .NET MAUI 项目。我目前正在尝试将该项目升级到最新的 .NET 8 版本。我参考了以下链接来获取指导:Upgrading .NET MAUI from .NE...
模拟 Microsoft.Toolkit.Mvvm.IMessenger
似乎出于某种原因,微软为其信使创建了一个接口,然后又将逻辑实现为接口本身的扩展方法。 不幸的是,我不能...
Avalonia 11 - 如何将数据从 View 传递到 ViewModel(需要处理文本框上的焦点)
我正在开发触摸屏应用程序。 我在将 GotFocus 数据传递到 ViewModel 时遇到问题。我的按钮需要知道当前选择了哪个文本框 - 它将更改 g...
我正在使用MVVM构建WPF应用程序,但在开发过程中遇到了问题。如何使 ViewModel 类和 xaml 文件一起工作,即将类作为 DataContext 传递,如果
在 C# WPF MVVM 中保持 TreeView ViewModel 和模型同步的策略
我尝试在拖放操作期间使 TreeView 与我的数据层保持同步。 问题 TreeView 中的拖放操作应该作用于 ItemViewModel 还是应该发送到...
在 C# WPF MVVM 中保持 ViewModel 和持久性同步的策略
我尝试在拖放操作期间使 TreeView 与我的数据层保持同步。 问题 TreeView 中的拖放操作应该作用于 ItemViewModel 还是应该发送到...
在 .NET MAUI 中难以删除和更新 ObservableCollection 中的分组项
标题:在 .NET MAUI 中使用 CollectionView 很难删除和更新 ObservableCollection 中的项目 我在删除和更新 ObservableCollection 中使用的项目时遇到问题...
我最近开始使用 SwiftUI 并构建了一个简单的应用程序来从 Web 服务获取数据。我的视图中有以下代码 结构ProductsView:查看{ @EnvironmentObject var
flutter go_router 出现 Riverpod 重定向异常/位置不能为空。 / 未通知重定向
我正在使用 Riverpod 作为状态管理来开发我的应用程序,并且我使用 go_router 包进行路由管理,专门用于将用户重定向到刷新令牌更新失败的登录页面。 所以
maui:当可观察集合中的项目更改其道具之一时,UI 不会更新,除非我离开并重新打开页面
我只是想捕获我的可观察集合中的一个项目并更改它的一个道具: 公共无效点击(对象obj) { Device.InvokeOnMainThreadAsync(() => { ...
我在 .NET MAUI 应用程序中设置了 MVVM 结构。 我的模型的结构如下: 公共部分类动物 { 公共字符串名称{获取;放; } } 公开课鸟类:动物 {...
在 .NET MAUI 中进行课程注册和编辑的共享 XAML/ViewModel 方法
我正在开发具有 MVVM 结构的 .NET MAUI。我有一个显示课程列表的主页。单击课程时,我将课程对象从 startpage.cs 传递到 CourseDetailsViewModel。 不...
目前我正在试验视图模型,想知道将视图模型传递给 recyclerview 适配器是否会导致内存泄漏?适配器中视图模型的唯一目的是提供...
在 NET MAUI 中的 MVVM 命令中更改双参数时,显示中的双参数不会更新
我正在为产品商店制作客户端应用程序。购物车位于服务器上,数据通过对服务器的请求传输到那里。产品篮是
具有数据类的 LiveData 不会在 ViewModel 中更新
我想在我的 MainViewModel 中使用我的数据类 AuthData。 de.hsfl.appamigos.capturetheflag 包 导入 androidx.lifecycle.MutableLiveData 数据类 AuthData(var game: MutableLiveData 我想在我的 MainViewModel 中使用我的数据类 AuthData。 package de.hsfl.appamigos.capturetheflag import androidx.lifecycle.MutableLiveData data class AuthData(var game: MutableLiveData<String>) package de.hsfl.appamigos.capturetheflag import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel class MainViewModel : ViewModel() { private val authData: MutableLiveData<AuthData> = MutableLiveData() fun getGame(): LiveData<AuthData> = authData fun setGame(newAuthData: AuthData) { authData.value?.game = newAuthData.game } fun startNewGame(text: String) { val newGame = MutableLiveData("1234") val newAuthData = AuthData(newGame) setGame(newAuthData) } } 当我尝试观察我的片段之一的变化时,它没有得到通知。 package de.hsfl.appamigos.capturetheflag import android.os.Bundle import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import de.hsfl.appamigos.capturetheflag.databinding.FragmentLobbyBinding class LobbyFragment : Fragment() { ... val mainViewModel: MainViewModel by activityViewModels() override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?, ): View? { // Inflate the layout for this fragment //val root = inflater.inflate(R.layout.fragment_lobby, container, false) val binding = FragmentLobbyBinding.inflate(inflater) val naviGraph = findNavController() mainViewModel.getGame().observe(viewLifecycleOwner) { binding.textViewGameID.text = it.game.toString() } ... return binding.root; //return inflater.inflate(R.layout.fragment_lobby, container, false) } } 我尝试取出数据类,只使用可变的,并且工作正常,所以所有连接都有点正确。 我想这是因为 authData 没有改变,但属性 game 改变了。如何观察属性本身的变化? 我无法解决数据类问题,因为这是我的教授的要求。我可以使用普通课程,但我看不出这有什么帮助。 我猜这是因为 authData 没有改变,但属性游戏改变了。 正是如此。 如何观察属性本身的变化? 观察属性本身。 mainViewModel.getGame().game.observe(viewLifecycleOwner) { binding.textViewGameID.text = it.game.toString() } 或者更新当前观察到的整个对象。 fun setGame(newAuthData: AuthData) { //authData.value?.game = newAuthData.game authData.value = newAuthData } 附注- 你的方法名称很混乱。获取并设置“游戏” 获取并设置一个“AuthData”,它本身有一个“游戏”?如果您要获取并设置“AuthData”,只需将其称为 getAuthData 和 setAuthData。 您在 LiveData 的数据类中有一个 LiveData。听起来不太对。 您的数据类应该只包含简单的类,即数字或字符串等,或其他数据类。此外,当从视图模型中公开时,您的数据类应该是不可变的,也就是说,它们只包含 val 属性。你的数据类应该看起来像这样: data class AuthData(val game: String) 使视图模型适应更改后的数据类,如下所示: class MainViewModel : ViewModel() { private val authData: MutableLiveData<AuthData> = MutableLiveData() fun getGame(): LiveData<AuthData> = authData private fun setGame(newAuthData: AuthData) { authData.value = newAuthData } fun startNewGame(text: String) { val newGame = "1234" val newAuthData = AuthData(newGame) setGame(newAuthData) } } 现在一切都应该正常了。
Kotlin Android 项目在 ViewModel 中使用数据类
我想在我的 MainViewModel 中使用我的数据类 AuthData。 de.hsfl.appamigos.capturetheflag 包 导入 androidx.lifecycle.MutableLiveData 数据类 AuthData(var game: MutableLiveData 我想在我的 MainViewModel 中使用我的数据类 AuthData。 package de.hsfl.appamigos.capturetheflag import androidx.lifecycle.MutableLiveData data class AuthData(var game: MutableLiveData<String>) package de.hsfl.appamigos.capturetheflag import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel class MainViewModel: ViewModel() { private val authData: MutableLiveData<AuthData> = MutableLiveData() fun getGame(): LiveData<AuthData> = authData fun setGame(newAuthData: AuthData) { authData.value?.game = newAuthData.game } fun startNewGame(text: String){ val newGame = MutableLiveData("1234") val newAuthData = AuthData(newGame) setGame(newAuthData) } } 当我尝试观察我的片段之一的变化时,它没有得到通知。 package de.hsfl.appamigos.capturetheflag import android.os.Bundle import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import de.hsfl.appamigos.capturetheflag.databinding.FragmentLobbyBinding class LobbyFragment : Fragment() { ... val mainViewModel: MainViewModel by activityViewModels() override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment //val root = inflater.inflate(R.layout.fragment_lobby, container, false) val binding = FragmentLobbyBinding.inflate(inflater) val naviGraph = findNavController() mainViewModel.getGame().observe(viewLifecycleOwner) { binding.textViewGameID.text = it.game.toString() } ... return binding.root; //return inflater.inflate(R.layout.fragment_lobby, container, false) } } 我尝试取出数据类,只使用可变的,并且工作正常,所以它的所有连接都有点正确。 我想这是因为 authData 没有改变,但属性游戏改变了。如何观察属性本身的变化? 我无法解决数据类问题,因为这是我的教授要求的,我可以使用普通类,但我看不出这有什么帮助。 我猜这是因为 authData 没有改变,但属性游戏改变了。 正是如此。 如何观察属性本身的变化? 观察属性本身。 mainViewModel.getGame().game.observe(viewLifecycleOwner) { binding.textViewGameID.text = it.game.toString() } 或者更新当前观察到的整个对象。 fun setGame(newAuthData: AuthData) { //authData.value?.game = newAuthData.game authData.value = newAuthData } 附注- 你的方法名称很混乱。获取并设置“游戏” 获取并设置一个“AuthData”,它本身有一个“游戏”?如果您要获取并设置“AuthData”,只需将其称为 getAuthData 和 setAuthData。
如何在 MVVM WPF 模式中执行关闭、隐藏窗口等命令或启动进程的命令
我正在 WPF 平台上使用 MVVM 模式开发应用程序,但我不知道如何使用与 ViewModel 中的视图直接相关的命令,这样就不会破坏