mvvm 相关问题

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

.net Maui 未将多对多绑定到选取器中的同一张表

我正在创建一个应用程序来注册团队进行体育统计。在本例中,我需要一个视图 (MVVM) 来选择两支球队并分配比赛结果。视图的第一部分(集合视图)wo...

回答 1 投票 0

如何将 ViewModel 与 Jetpack Compose 结合使用?

我正在尝试将 ViewModel 与 Jetpack Compose 结合使用, 通过进行数字增量。 但这不起作用。也许我没有以正确的方式使用视图模型。 这是我的主要活动代码 主活动类:

回答 2 投票 0

导航主机片段不显示任何片段

任何人都可以帮助我,我使用 mvvm 模型在我的应用程序中显示电影信息,我想我做了所有正确的事情,但是当我运行我的应用程序时,它在片段和主要活动中没有显示任何内容...

回答 1 投票 0

如何使用 MVVM 模式在 Xamarin 中缩放 ListView 中的图像?

我是 Xamarin 的新手,特别是 MVVM 的新手。我有一个 ListView,它向我显示图像。 我是 Xamarin 的新手,特别是 MVVM 的新手。我有一个 ListView,它正在向我显示图像。 <ListView ItemsSource="{Binding Urls}" IsVisible="True" VerticalScrollBarVisibility="Always" HorizontalScrollBarVisibility="Always" HorizontalOptions="Fill" VerticalOptions="Fill" HasUnevenRows="True"> <ListView.ItemTemplate> <DataTemplate> <ViewCell> <StackLayout Orientation="Vertical" HorizontalOptions="Fill" VerticalOptions="FillAndExpand" Padding="2"> <ffimageloading:CachedImage Source="{Binding .}" Aspect="AspectFill" Margin="15"> <ffimageloading:CachedImage.GestureRecognizers> <TapGestureRecognizer Command="{Binding Source={x:Reference ImgListView},Path=BindingContext.ImageDoubleTappedCommand}" /> </ffimageloading:CachedImage.GestureRecognizers> </ffimageloading:CachedImage> </StackLayout> </ViewCell> </DataTemplate> </ListView.ItemTemplate> </ListView> 现在我想要通过双击和捏合进行缩放的缩放行为。 我在互联网上找到了不同的链接,但这些链接没有实现 MVVM。 例如:https://www.c-sharpcorner.com/article/zoom-in/。 如何在 MVVM 中获得缩放功能? 我只是使用后面的代码来触发事件并使用那里的缩放逻辑: <TapGestureRecognizer Tapped="TapGestureRecognizer_TappedAsync" /> 以下逻辑来自链接:https://www.c-sharpcorner.com/article/zoom-in/ double currentScale = 1; double startScale = 1; double xOffset = 0; double yOffset = 0; private void TapGestureRecognizer_TappedAsync(object sender, System.EventArgs e) { var Content = ((FFImageLoading.Forms.CachedImage)sender); double multiplicator = Math.Pow(2, 1.0 / 10.0); startScale = Content.Scale; Content.AnchorX = 0; Content.AnchorY = 0; for (int i = 0; i < 10; i++) { currentScale *= multiplicator; double renderedX = Content.X + xOffset; double deltaX = renderedX / Content.Width; double deltaWidth = Content.Width / (Content.Width * startScale); double originX = (0.5 - deltaX) * deltaWidth; double renderedY = Content.Y + yOffset; double deltaY = renderedY / Content.Height; double deltaHeight = Content.Height / (Content.Height * startScale); double originY = (0.5 - deltaY) * deltaHeight; double targetX = xOffset - (originX * Content.Width) * (currentScale - startScale); double targetY = yOffset - (originY * Content.Height) * (currentScale - startScale); Content.TranslationX = Math.Min(0, Math.Max(targetX, -Content.Width * (currentScale - 1))); Content.TranslationY = Math.Min(0, Math.Max(targetY, -Content.Height * (currentScale - 1))); Content.Scale = currentScale; //await Task.Delay(10); } xOffset = Content.TranslationX; yOffset = Content.TranslationY; }

回答 1 投票 0

MAUI MVVM xaml“找不到用于绑定的 DataContext”。更新的值未显示

我有两个标签字段 TabName 和 DisplayDate 以及绑定到 ViewModel 的 Collection Tasks,并且标签字段的值最初已设置,但不会出现更改。将鼠标悬停在标签上...

回答 1 投票 0

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

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