mvvm 相关问题

Model-View-ViewModel(MVVM)是一种架构设计模式,用于实现用户界面,通过其表示逻辑(其ViewModel)将UI(View)与其数据(Model)分开。

SwiftUI 中 MVVM 模式中多个切换的绑定变量数组

我有一个简单的用例,即拥有一个动态数量的文本的 VStack,其中带有来自数组的切换按钮。 导入 SwiftUI 公共结构测试:查看{ @ObservedObject 公共变量

回答 1 投票 0

如何创建自定义 avalonia 控件

我正在学习 Avalonia,通过阅读文档我无法弄清楚这一点。 假设我想创建一个自定义用户控件,以便于在触摸屏上输入数字。 我哦...

回答 1 投票 0

如何在页面重新加载时正确从在线API获取数据?

我正在构建一个 MAUI 应用程序,并试图找出在打开/重新打开 XAML 页面时从互联网获取数据的正确且推荐的方法。 我找到了使用代码隐藏方法的建议: 保护...

回答 1 投票 0

将选定的行从 WPF DataGrid 发送到 SQL 表时遇到困难

我的 WPF 应用程序遇到一个问题,我需要将选定的行从 DataGrid 发送到 SQL 数据库表。尽管实现了必要的逻辑,但负责处理的方法......

回答 1 投票 0

TreeView 根据子项选择父复选框 - WPF MVVM

我是 WPF 新手。我找到了一些示例,并在 C# WPF Mvvm 中整理了一个树视图示例。我根据父母的选择选中或取消选中孩子的复选框。我不知道如何加入...

回答 1 投票 0

你能描述一下我的WPF项目中有什么不正确的地方吗&

我是 WPF 新手。这是我的主窗口代码 我是 WPF 新手。这是我的 MainWindow 代码 <StackPanel Grid.Row="1"> <RadioButton Content="Главная" Height="50" Foreground="White" FontSize="14" Style="{StaticResource MenuButtonTheme}" IsChecked="True" Command="{Binding ChangeToHome}"/> <RadioButton Content="Добавить раскраску" Height="50" Foreground="White" FontSize="14" Style="{StaticResource MenuButtonTheme}" Command="{Binding ChangeToDiscovery}"/> </StackPanel> 以及 MainViewModel.cs 的代码 private void ChangeToHome (object value) { CurrentView = HomeVM; MessageBox.Show("Now in home", "alert", MessageBoxButton.OK, MessageBoxImage.Information); } private void ChangeToDiscovery (object value) { CurrentView = DiscoveryVM; MessageBox.Show("Now in Discovery", "alert", MessageBoxButton.OK, MessageBoxImage.Information); } private bool CanChangeView(object value) { return true; } public MainViewModel() { HomeVM = new HomeViewModel(); DiscoveryVM = new DiscoveryViewModel(); CurrentView = HomeVM; HomeViewCommand = new RelayCommand(ChangeToHome, CanChangeView); DiscoveryViewCommand = new RelayCommand(ChangeToDiscovery, CanChangeView); } 我没有收到任何错误,但没有任何效果。当我单击单选按钮时,没有消息,也不会改变视图。 引起我注意的第一件事是命令绑定到 ViewModel 中声明的错误属性。 可能还有其他错误,但要理解这一点,您需要更完整的代码片段。包括如何实例化 ViewModel 并将其传递给数据上下文。

回答 1 投票 0

如何使用hilt dagger在服务中注入ViewModel

我想在Service中注入View Model,怎么可能。 我最近开始通过 Dagger Hilt 在我的项目中使用 DI。将 viewModel 实例注入 Activity/

回答 1 投票 0

SwiftUI 视图模型中存在什么样的数据引用?

这不仅仅是一个哲学问题;这是一个哲学问题。这是一个真正的设计问题。我正在努力解决如何向 UI 公开应用程序的中央数据模型。 无论你想怎么称呼它们,这些对象都在处理......

回答 1 投票 0

如何将项目添加到房间数据库? [已关闭]

由于某种原因,我无法向房间数据库添加项目,我的 Daos 的其余部分工作正常,但似乎 @Upsert 不行(显然我在某个地方搞砸了)。我在“应用程序检查&q...

回答 1 投票 0

WPF:文本框和绑定到 Double 无法键入。在它上面

我有一个像这样的文本框 我有一个像这样的文本框 <TextBox Text="{Binding TransactionDetails.TransactionAmount, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Column="3" Grid.ColumnSpan="2" Grid.Row="5" x:Name="TextBoxAmount"/> 我将“TransactionAmount”设为 Double。它在整数值上运行良好,但是当我输入一些浮点值(例如 100.456)时,我无法输入“。” 每次值发生变化时,您都会更新您的属性。当您输入 . 时,它会被写入您的视图模型中并更新视图。 例如如果您输入 100.,它会四舍五入为 100,因此您永远不会看到任何点。 您有一些选项可以改变此行为: 使用延迟绑定: <TextBox Text="{Binding Path=TransactionDetails.TransactionAmount, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Delay=250}" Grid.Column="3" Grid.ColumnSpan="2" Grid.Row="5" x:Name="TextBoxAmount" /> 仅在与保存的值不同时更改该值 (我建议每个绑定都使用这个): private double _transactionAmount; public double TransactionAmount { get { return _transactionAmount; } set { if (_transactionAmount != value) { _transactionAmount = value; Notify("TransactionAmount"); } } 或使用某种验证,例如验证异常。 当您的应用程序面向 .NET 4.0 或更早版本时,该行为符合预期,但后来发生了更改 (MSDN)。可以通过设置恢复旧的行为: System.Windows.FrameworkCompatibilityPreferences.KeepTextBoxDisplaySynchronizedWithTextProperty = false; 尽早设置(例如在 App.cs 的构造函数中),否则框架会引发异常。 来源及详细解释:https://web.archive.org/web/20220127083119/https://www.mobilemotion.eu/?p=1855 我通过使用StringFormat像得到的最佳解决方案 <TextBox Text="{Binding TransactionDetails.TransactionAmount, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,StringFormat=N2}" Grid.Column="3" Grid.ColumnSpan="2" Grid.Row="5" x:Name="TextBoxAmount" /> 我们也可以根据要求定制字符串格式 您的问题出在 UpdateSourceTrigger 上。 你可以使用这样的东西,而不是在那里使用, private double amount; public double Amount { get { return amount; } set { amount= value; PropertyChanged(); Calculation(); } } PropertyChanged() 您将从 INotifyPropertyChanged 中获取它。欲了解更多信息,请点击此处 https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.110).aspx 绑定双精度类型源数据时,可以用此类替换默认转换器。这样使用起来比较方便。下面是代码: public class double2txtConverter : IValueConverter { string _strCache; double _dCache; //Convert double to string of textbox. public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (_dCache == (double)value) return _strCache; else return value.ToString(); } //convert string to double; public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { _strCache = (string)value; _dCache = double.Parse(_strCache); return _dCache; } } //below is codebehind usage: Binding bd = new Binding(path); bd.Converter = new double2txtConverter(); bd.Source = source; bd.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; txtTarget.SetBinding(TextBox.TextProperty, bd); 我根据上面Herm的回答给出答案。解释是正确的,但在控制上使用 Delay 并不能完全解决问题。如果最终用户输入0.005,则需要的延迟会更多,否则它将重新写入值为0。 相反,使用字符串属性进行绑定并尝试将其解析为双倍,并根据解析输出设置您需要的 long 值。在设置值之前进行您需要的所有类型的验证 private double _amount; private string _amountString; public string Amount { get { return _amountString;} set { double d=0; if(Double.TryParse(value, out d)) { _amountString=value; _amount=d; } } } } 在属性使用的绑定中,UpdateSourceTrigger=LostFocus。一旦文本框失去焦点,它将更新属性。 我通过附加属性解决了这个问题。 public class DoubleTextBox : TextBox { public string DoubleText { get => (string)GetValue(DoubleTextProperty); set => SetValue(DoubleTextProperty, value); } public static readonly DependencyProperty DoubleTextProperty = DependencyProperty.Register( nameof(DoubleText), typeof(string), typeof(DoubleTextBox), new FrameworkPropertyMetadata( string.Empty, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault | FrameworkPropertyMetadataOptions.Journal, new PropertyChangedCallback(OnDoubleTextChanged), null, true, UpdateSourceTrigger.LostFocus)); private static void OnDoubleTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (d is TextBox textBox) { var currentText = textBox.Text; var newText = (string)e.NewValue; if (currentText == newText) return; if ( double.TryParse(currentText, out var currentDouble) && double.TryParse(newText, out var newDouble) && currentDouble == newDouble ) return; textBox.Text = newText; } } protected override void OnTextChanged(TextChangedEventArgs e) { base.OnTextChanged(e); this.DoubleText = this.Text; } } 用途: <myControl:DoubleTextBox DoubleText="{Binding Double1, UpdateSourceTrigger=PropertyChanged}" />

回答 8 投票 0

在 ReactiveUI Avalonia (MVVM) 中显示 ViewModel 的对话框

我有 Window,继承自 ReactWindow,并且它连接到它的 Viewmodel 。 一切都按预期工作(绑定、点击内容、点击命令)。所以它正在发挥作用。 (代码如下) 当

回答 2 投票 0

Prism 6 WPF 创建shell问题覆盖onstartup类

如果我使用 prism 6,如何覆盖默认启动类或窗口。 我浏览了prism的官方文档,但找不到预期的答案。 我尝试导出应用程序 c...

回答 1 投票 0

NotifyCanExecuteChangedFor 添加到 MAUI 8.0 中的对象时不起作用

我试图禁用 XAML 按钮,直到表单有效,在初始加载时它被禁用,但在模型验证过程中未启用。 这是我的代码 公共类登录请求 { 公共圣...

回答 1 投票 0

.NET Maui - 单击当前显示的同一选项卡时重置导航堆栈

我想在我的 maui shell 应用程序中为 TabBar 实现非常具体的东西。从技术上讲,用户现在可以进入该选项卡上的详细信息页面的无限循环。 根选项卡页面-> 详细信息页面->

回答 2 投票 0

如何修复错误消息:“类型不匹配”推断类型为 MutableState<List<Task>> 但需要 Int”

第一次使用 ViewModel,所以这里有点迷失。我已经像这样定义了我的视图模型: 数据类任务( 有效 ID:字符串, val 标题:字符串, val 描述:字符串, ...

回答 1 投票 0

毛伊岛 Windows 应用程序标签文本未在 UI 中更新

我的目的是更新 UI 上的 ping 状态。我在 MAUI 桌面应用程序中使用 MVVM 模式。 在 MainPage.xaml.cs 中 命名空间 MauiSamApp { 公共部分类 MainPage :ContentPage { ...

回答 1 投票 0

DataGrid 单元格值已更改 WPF - MVVM

我希望当值改变时数据网格的前景色为蓝色。因此,用户应该明白该值已经改变并且应该激活保存功能。 为此目的...

回答 1 投票 0

绑定:在 MAUI 8.0 中使用 CollectionView 时在 ViewModel 上找不到属性

我按照此链接将 CollectionView 添加到我的 XAML 页面,但我得到 绑定:找不到属性“AccountNumber” “***GlAccountsViewModel” 。 Visual Studio 的智能

回答 1 投票 0

TabControl SelectedItem 绑定问题

在选项卡式界面应用程序中,我尝试将 TabItem 标头字符串或所选 TabItem 中包含的对象传递到视图模型以使用它 发布这样的事件: 在 Vi...

回答 1 投票 0

MVVM、XAML、C# - DependencyProperty - ItemsControl 中的 ObservableCollection 无法识别 Property

我对 MVVM 和 c# 系统相当陌生,只是将其用作一个小小的业余爱好。在过去的三天里,我一直对以下问题感到绝望。 我有一个带有相应的自定义控件视图...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.