Model-View-ViewModel(MVVM)是一种架构设计模式,用于实现用户界面,通过其表示逻辑(其ViewModel)将UI(View)与其数据(Model)分开。
如何将最新的稳定依赖项和插件添加到最新版本的 Android Studio Koala
我想在我的项目中实现MVVM架构。纽约的 Android Studio 是 Koala。 我的项目级别 gradle 文件如下所示 // 顶级构建文件,您可以在其中添加常见的配置选项...
我目前正在开发一个项目,涉及使用 C# 在 MVVM、WPF 应用程序中进行多树视图选择。树视图支持在...之间剪切、复制、移动和粘贴等功能
场景: 用户单击视图上的按钮 这会调用 ViewModel 上的命令 DoProcessing 考虑到 View 和 ViewMo 的职责,如何以及在哪里设置等待光标...
向另一个窗口显示所选对象的对象详细信息用户控件使用 mwwm
我有一个从数据库填充的人员列表,人员对象中的两个字段(id,名称)通过单选按钮进行数据绑定,现在当我单击单选按钮时,我将打开一个新的 UserControl 并...
我在我的 C# WPF MVVM 应用程序中创建了一个 UserControl。当我在组合框过滤产品显示中输入时,假设下拉列表中显示 8 个过滤产品,如果我尝试,问题从这里开始...
Android Kotlin/Compose ViewModel - 用于两个独立功能的两个 SateFlow 到用于 UI ViewModel 的一个 StateFlow?
首先,我不是开发人员或其他任何人,但我想要一个我的手机上不存在的应用程序,并且我了解最少量的编码,了解了 Android Kotlin/Jetpack Compose 基础知识......
如何处理在 Swift/SwiftUI/MVVM 中显示和修改数组元素的视图
非常基本的问题,我有专业的开发经验,但对 Swift 来说是全新的,仍在弄清楚它的设计模式等。我一直在学习斯坦福大学的课程。第一对情侣
如何实现TextChanged的CommunityToolkit MVVM方式
我正在使用 .Net Maui 的社区工具包,并在项目中进行一些 mvvm 绑定。 我有一个连接到 ViewModel 的集合视图和搜索栏。我希望实现搜索栏的是
验证错误模板显示在“ContentControl”而不是“TextBox”上
问题 我正在尝试根据以下要求生成有关验证 TextBox 输入控件的结果的视觉反馈: 文本框边框周围显示一个红色框 任何错误消息...
目前我的应用程序中有这种方法: ViewState(每个屏幕一个视图状态) 密封类 CategoryViewState { 对象加载:CategoriesViewState() 数据类错误( 瓦尔
MVVM 工具包数据验证和 ObservableProperty
我正在使用 WPF 并使用 MVVM 社区工具包。阅读文档,我了解到我可以通过继承 ObservableValidator 并使用此模式来进行验证工作......
我正在制作一个检查输入文本的程序。它的本质是有文本,有一个输入文本的字段,输入时会检查输入的文本,如果字符正确...
我有两个模型,单元和建筑物。在 Unit 中,有一个 BuildingId(外键)字段与 Building 对象相关联。我正在编写一个集合视图来显示所有单元。我也有一个...
C# WPF - 如何根据其中一项的更改来更新列表中的所有项目,并使绑定起作用?
我正在尝试创建一个 WPF 应用程序,其中在 DataGrid 中有一个项目列表(在本例中为墙),并且我想要可视化项目(墙)的几何形状。我在下面附上了一张图片。 巴斯...
我有一个视图模型: @MainActor公共类TestViewModel:ObservableObject { @已发布的变量数据:[字符串:[字符串]] 在里面() { self.data = ["a": ["a1", &qu...
我看到 Flow 有重试机制,但我的用例与我在文档中看到的有所不同,我有一个片段,其中包含打开此片段时从 API 填充的列表,但 API
我有一个具有以下视图的 iOS 应用程序: 结构LoggedInUserView:视图{ @ObservedObject var viewModel:LoggedInUserViewModel @StateObject var sharePortionViewModel: SharedPortionViewModel(
我正在尝试找出如何阻止用户在数据网格中添加或重命名字段(如果他们选择的值是重复的)。例如,如果有一个 Person 对象的目录,如果有一些...
我有一个任务栏“UserHomeTaskBar”嵌入在父窗口“WindowUserHomeView”中,我想使用 x:bind 将任务栏的日期/时间文本绑定到父窗口的视图模型&q...
WPF MVVM 绑定超链接RequestNavigate 到视图模型
在 WPF 表单上,我有一个超链接,单击该超链接时应该会在重定向到内部网页之前聚合数据库中的一些数据。 当前 XAML 如下所示: 在 WPF 表单上,我有一个超链接,单击该超链接后应该会在重定向到内部网页之前聚合数据库中的一些数据。 当前 XAML 如下所示: <Hyperlink RequestNavigate="Hyperlink_RequestNavigate" IsEnabled="{Binding CanTakePayment}"> Launch Payments Portal </Hyperlink> 使用 Hyperlink_RequestNavigate 方法来执行数据库操作,该方法位于 View.xaml.cs 看起来像: private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e) { var transactionReference = GetToken(100M, "13215", "product"); var url = string.Format("{0}New?transactionReference={1}", Settings.Default.PaymentUrlWebsite, transactionReference); e.Handled = true; } 我不喜欢这种机制,更愿意将其移至视图模型。 我尝试做的是添加到 ViewModel 属性 public ICommand NavigateToTakePayment { get { return _navigateToTakePayment; } set { _navigateToTakePayment = value; } } 并在 XAML 中将绑定更改为 <Hyperlink RequestNavigate="{Binding Path=NavigateToTakePayment}" IsEnabled="{Binding CanTakePayment}"> Launch Payments Portal </Hyperlink> 但它开始给我抛出异常。 将此机制从 View 转移到 ViewModel 最合适的方法是什么? HyperLink是一个有点问题的孩子。不支持命令绑定。 可以使用附加属性将命令绑定支持硬塞到其中,但修改按钮来完成相同的操作会更容易。 <Style TargetType="Button" x:Key="HyperlinkStyledButton"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <TextBlock Foreground="DodgerBlue" Text="{TemplateBinding Content}" TextDecorations="Underline" Cursor="Hand" /> </ControlTemplate> </Setter.Value> </Setter> </Style> 然后使用这样的超链接: <Button Command="{Binding OpenHttpLinkCommand}" Content="www.google.com" Style="{StaticResource HyperlinkStyledButton}" ToolTip="Some custom tooltip"/> 假设标准 MVVM 绑定工作正常: 在视图模型中: public ICommand OpenHttpLinkCommand { get; } 在 ViewModel 构造函数中: this.OpenHttpLinkCommand = new DelegateCommand(this.OnOpenHttpLinkCommand); 以及通过链接打开浏览器的命令: private void OnOpenHttpLinkCommand() { try { System.Diagnostics.Process.Start("http://www.google.com/"); } catch (Exception) { // TODO: Error. } } 您的应用程序的问题是ICommand在使用前未初始化。我有一个像这样的命令实现: public class RelayCommand : ICommand { Predicate<object> _canExecute; Action<object> _execute; bool _defaultBehaviourForCanExecute; public RelayCommand(Action<object> execute, bool defaultBehaviourForCanExecute = true, Predicate<object> canExecute = null) { _canExecute = canExecute; _execute = execute; _defaultBehaviourForCanExecute = defaultBehaviourForCanExecute; } public bool CanExecute(object parameter) { if (_canExecute != null) { Logger.LogInformation("Evaluating can execute method for " + _canExecute.Method.DeclaringType + "->"+_canExecute.Method.Name); return _canExecute.Invoke(parameter); } return _defaultBehaviourForCanExecute; } public event EventHandler CanExecuteChanged; public void RaiseCanExecuteChanged() { if (CanExecuteChanged != null) CanExecuteChanged(this, new EventArgs()); } public void Execute(object parameter) { Logger.LogInformation("Executing command method for " + _execute.Method.DeclaringType + "->" + _execute.Method.Name); _execute.Invoke(parameter); RaiseCanExecuteChanged(); } } 现在这正在我的ViewModel中初始化,如下所示: NavigateToTakePayment = new RelayCommand(navigateToTakePayment CommandMethod);//it also can take canExecute method if you need a condition before executing. 然后在你的 xaml 中像这样使用它: <Hyperlink RequestNavigate="{Binding Path=NavigateToTakePayment}" IsEnabled="{Binding CanTakePayment}"> Launch Payments Portal </Hyperlink> 顺便说一句:当您需要禁用超链接时,请实现canexecute方法,然后它会自动完成。 旧线程,但对于那些像我一样仍然遇到它的人,Hyperlink确实支持ICommandBinding,但你需要一个派生类来这样做: using System.Windows.Documents; public class HyperlinkCommander : Hyperlink { protected override void OnClick() { Command.Execute(null); } } 然后在您的 xaml 中使用它,就像将 Button 绑定到 ViewModel 中的 ICommand 时一样,在本例中称为 HyperlinkClickerCommand。 像这样的东西: <localControls:HyperlinkCommander Command="{Binding HyperlinkClickerCommand}" > Click me! </localControls:HyperlinkCommander> 在 xaml 顶部附近有类似这样的内容: <Window ... xmlns:localControls="clr-namespace:TestProject.Controls" ... > 其中 HyperlinkClickerCommand 是您要绑定到的 ViewModel 中的命令。 上面的超链接将触发绑定命令的 Execute,并遵守它的 CanExecute。