mvvm 相关问题

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

更新数据网格中选定行的复选框

WPF 初学者这里可能是一个非常简单的问题。是否可以选择多行并选中所有选定的复选框? 我想检查选定的 S601 和 S701 盒子...

回答 1 投票 0

为什么我的 SwiftUI 视图无法从 @StateObject 的 @Binding 成员获取 onChange 更新?

鉴于我在下面概述的设置,我试图确定为什么 ChildView 的 .onChange(of: _) 没有接收更新。 导入 SwiftUI struct SomeItem: Equatable { var double 值: 双精度 } 是...

回答 2 投票 0

使用 MVVM 将新元素添加到 WPF 中 DataGrid 中的 ComboBox

我有一个包含事务的数据网格。我有一个 InterestOrDividend 列,我可以在其中使用组合框选择一个值。这很好用。 一个新功能是输入一个值并添加它......

回答 1 投票 0

Maui MVVM:最简单的模式不起作用

我正在使用 MVVM 模式对项目进行少量添加。 该项目有点大,但我将其精简为一个很小的示例项目,以使这里的工作变得更容易。 代码 忙碌查看模式...

回答 1 投票 0

ViewModel 中的 RelayCommand 继承

我正在设计一个主/详细视图模型方案,因此我创建了一个基类,该基类实现“添加”、“编辑”、“保存”、“取消”和“删除”命令,并管理这些命令的 CanExecute 逻辑。豪...

回答 1 投票 0

向视图添加一个按钮,使用 Community Toolkit 和 MVVM 将用户重新路由到 Avalonia 中的另一个视图

我刚刚开始学习 Avalonia,我想知道如何创建一个按钮,将我从一个视图重新路由到另一个视图。 我有第一个视图,标题为 ValueSelectionPageView,我想向其添加一个按钮

回答 1 投票 0

ObservableCollections vs ObservableObject vs ObservableRecipient vs ViewmodelBase?

我是 avaloniaUI 和 MVVM 社区工具包的初学者。 现在,我正在制作一个 KanbanBoard Windows 应用程序并编写 ViewModel 代码。 我在他们的 github 中红色了 SimpleToDoList。然而我无法理解这些

回答 1 投票 0

CommunityToolKit Mvvm 8.2.2 如何将 Integer 注册为 TMessage

我正在尝试将整数注册为 TMessage 但似乎不可能。如果我没记错的话,在 MVVMLightLibs 中是可能的。 这是给出错误的代码 int 最后Recie...

回答 1 投票 0

.NET MAUI实时检测当前CultureInfo是否发生变化?

我按照 Geralt 的 YouTube 视频中有关 .NET MAUI 上的多语言的教程进行操作,非常好且非常详细:https://www.youtube.com/watch?v=cf4sXULR7os 经过多次谷歌搜索结果...

回答 1 投票 0

RelayCommand 未刷新执行/可以执行更改

我是 mvvm 的新手(当然还有 mvvlight)。我有 3 个模型视图(一个带有容器的主窗口,另外 2 个模型视图(登录和菜单))。在 LoginModelView 中,当用户登录时

回答 2 投票 0

如果尚未选择项目,则将组合框边框设置为红色

我是 C# 和 WPF 的新手,老实说这周才开始自学。我正在尝试制作一个突出显示红色的下拉菜单(表示此字段是必需的),直到选择一个项目...

回答 1 投票 0

MVVM WPF 数据网格选择绑定到具有复杂对象的组合框

我正在尝试实现一个 DataGrid,其中一列有一个复杂的对象,而组合框(网格外)有一个该列的同一时间对象的列表。使用 WPF 和 MVVM。 当我...

回答 1 投票 0

使用MVVM从cmd输出错误数据中实时读取

我正在编写一个程序,该程序读取 cmd 脚本输出并在日志(视图模型)中显示结果。由于脚本运行了很长时间,我希望能够在每行写入后看到输出...

回答 2 投票 0

单独的 DataGrid 绑定到同一个 Observable 集合

我有一个带有 TabControl 的 WPF 应用程序,在两个不同的 TabItem 上,我想在每个 TabItem 上的 DataGrid 中显示相同的内容。 操作顺序如下: 用户选择信号或...

回答 1 投票 0

UserControl 未在 WPF ContentControl 中呈现

我是 WPF 和 MVVM 的新手。我花了两天时间浏览了一堆关于这个主题的问答,但我还没有成功地让它发挥作用。这不可避免地意味着这是愚蠢的事情......

回答 1 投票 0

WPf,MEF架构设计

我在设计可扩展程序的架构时遇到了一些问题。 我正在使用 MEF、MMVM Light Toolkit 和 AvalonDock。 第一个问题是如何显示某些 ViewModel 的视图

回答 1 投票 0

CollectionViewSource.SortDescriptions 仅适用于基础 ObservableCollection 的第一个第一个群体

我有一个带有 CollectionViewSource 设置如下的网格: 我有一个 Grid,其 CollectionViewSource 设置如下: <UserControl.Resources> <CollectionViewSource x:Key="PriceHistoryItemsViewSource" Source="{Binding PriceHistory}" IsLiveSortingRequested="True"> <CollectionViewSource.SortDescriptions> <componentModel:SortDescription PropertyName="Inserted" Direction="Descending"/> </CollectionViewSource.SortDescriptions> </CollectionViewSource> </UserControl.Resources> <DataGrid Style="{StaticResource HistoryGrid}" ItemsSource="{Binding Source={StaticResource PriceHistoryItemsViewSource}}"> <DataGrid.Columns> ///... </DataGrid.Columns> </DataGrid> 在 ViewModel 中,PriceHistory 是由 ObservableCollection 更新的 RefreshPriceHistoryAsync,如下所示: public class OptionPriceHistoryViewModel : PriceHistoryViewModel { //... other code public ObservableCollection<OptionPriceHistoryRecordViewModel> PriceHistory { get; } = new(); public override async Task RefreshPriceHistoryAsync(string correlationId) { var priceHistory = await _historyProvider.GetOptionPriceHistoryAsync(id); PriceHistory.Clear(); foreach (var priceHistoryRecord in priceHistory) PriceHistory.Add(new OptionPriceHistoryRecordViewModel( priceHistoryRecord.InsertDate, priceHistoryRecord.Username //... etc. )); } } 此 ViewModel 用作 Window 控件中的 DataContext。 可以重复使用同一窗口来显示各种实体的价格历史记录。 排序仅在第一次填充 PriceHistory 时有效。如果重复使用同一个窗口来显示各种实体的历史记录,则在第一个之后的所有调用中都会忽略排序(即,项目按照它们来自数据库的顺序显示)。 如何在重用窗口时保留排序? 坦率地说,我不明白为什么它不起作用,因为每次重用窗口时,都会创建 OptionPriceHistoryViewModel 的新实例......并且项目的绑定有效,但排序不起作用。 您还需要设置 LiveSortingProperties 属性: <CollectionViewSource x:Key="PriceHistoryItemsViewSource" Source="{Binding PriceHistory}" IsLiveSortingRequested="True"> <CollectionViewSource.SortDescriptions> <componentModel:SortDescription PropertyName="Inserted" Direction="Descending"/> </CollectionViewSource.SortDescriptions> <CollectionViewSource.LiveSortingProperties> <s:String>Inserted</s:String> </CollectionViewSource.LiveSortingProperties> </CollectionViewSource> 这里有一些关于此的链接: 我需要 CollectionViewSource 排序/实时排序说明 https://www.codeproject.com/Questions/326899/CollectionViewSource-not-sorting

回答 1 投票 0

Xamarin Forms - 否定 bool 绑定值

我正在学习 xamarin 形式和 mvvm 模式。我想知道是否可以否定绑定布尔值。我的意思是: 我有,比方说带有 isVisible 绑定的 Entry: 我正在学习 xamarin 形式和 mvvm 模式。我想知道是否可以否定绑定布尔值。我的意思是: 我有,比方说,带有 isVisible 绑定的条目: <Entry x:Name="TextEntry" IsVisible="{Binding IsVisibleEntry}" /> 和 Label 当 TextEntry 可见时我想隐藏它们。 <!-- ofc it is not working --> <Label x:Name="MainLabel" isVisible="!{Binding IsVisibleEntry}" /> 是否可以在 MainLabel 中不为 ViewModel 创建新变量? 选项一:转换器 定义转换器: public class InverseBoolConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return !((bool)value); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return value; //throw new NotImplementedException(); } } XAML 中的用法: <Label x:Name="MainLabel" isVisible="{Binding IsVisibleEntry, Converter={Helpers:InverseBoolConverter}}"/> XAML 标头 xmlns:Helpers="clr-namespace:HikePOS.Helpers" 选项二:触发 <Label x:Name="MainLabel" isVisible="{Binding IsVisibleEntry}"> <Label.Triggers> <DataTrigger TargetType="Label" Binding="{Binding IsVisibleEntry}" Value="True"> <Setter Property="IsVisible" Value="False" /> </DataTrigger> </Label.Triggers> </Label> 您可以使用 Xamarin Community Toolkit,而不是编写自己的转换器,它现在有一个可以开箱即用的转换器 invertedboolconverter。这个例子(取自微软的文档)展示了它是如何工作的: <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:xct="http://xamarin.com/schemas/2020/toolkit" x:Class="MyLittleApp.MainPage"> <ContentPage.Resources> <ResourceDictionary> <xct:InvertedBoolConverter x:Key="InvertedBoolConverter" /> </ResourceDictionary> </ContentPage.Resources> <StackLayout> <Label IsVisible="{Binding MyBooleanValue, Converter={StaticResource InvertedBoolConverter}}" /> </StackLayout> </ContentPage> 您将需要创建一个反向转换器,以便您的绑定看起来有点像这样: public class InverseBoolConverter : IValueConverter { public object Convert (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return !(bool)value; } public object ConvertBack (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return !(bool)value; } } 在您的 XAML 中 <local:InverseBoolConverter x:Key="inverter"/> <Entry x:Name="TextEntry" IsVisible="{Binding IsVisibleEntry, Converter={StaticResource inverter}}" /> 尽管@praty 的解决方案有效,但如果您像我一样使用自定义控件/视图或 XCT 的弹出窗口。在我们的 XAML 中使用转换器之前,我们需要这样指定: <ContentView.Resources> <converters:InverseBoolConverter x:Key="invrerseBoolConverter" /> </ContentView.Resources> 因此最终代码将是: InverseBoolConverter.cs // Under namespace MyProject.Converters public class InverseBoolConverter : IValueConverter { public object Convert (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return !(bool)value; } public object ConvertBack (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return !(bool)value; } } XAML 代码 <xct:Popup ... xmlns:xct="http://xamarin.com/schemas/2020/toolkit" xmlns:converters="clr-namespace:MyProject.Converters" ...> <ContentView> <ContentView.Resources> <converters:InverseBoolConverter x:Key="inverseBoolConverter" /> </ContentView.Resources> <StackLayout> <Label IsVisible="{Binding IsVisibleLabel, Converter={StaticResource inverseBoolConverter}}" /> </StackLayout> </ContentView> </xct:Popup> 注意:虽然我们可以使用 Xamarin 社区工具包的 InvertedBoolConverter,但我已经描述了手动解决方案,以便我们可以添加除内置转换器之外的自定义值转换器。 我喜欢已经提供的答案,但我想我应该添加我自己有时使用的版本。在 MVVM 架构中,视图模型的属性都在对象设置器中调用 SetProperty(),从而引发 INotifyPropertyChanged 事件。我一直在做的是将第二个属性添加到视图模型中,并在第一个属性的设置器中将其值设置为 !value。 例如,每当属性 button.IsEnabled = false 出现时,我希望按钮为 ViewModel.IsBusy = true。这是一个反向布尔示例,就像您所问的那样。 ViewModel.cs 属性: private bool enableButton; public bool EnableButton { get { return enableButton; } set { SetProperty(ref enableButton, value); } } private bool isBusy; bool IsBusy { get { return isBusy; } set { SetProperty(ref isBusy, value); EnableButton = !value; } } XAML: <ActivityIndicator IsRunning="{Binding IsBusy}"/> <Button Text="Start Sync" Command="{Binding SyncCommand}" IsEnabled="{Binding EnableButton}"/> 这样,在我的代码中任何时候我调用IsBusy = true,它都会同时设置button.IsEnabled = false,解决反向布尔问题。

回答 5 投票 0

如何为标有[RelayCommand]的方法定义接口

我的团队需要 ViewModel 的接口。我喜欢 MVVM 社区工具包,但我想同时使用接口和 [RelayCommand] 属性类方法。 如何定义

回答 1 投票 0

禁用 DataGrid 中自动生成的列的排序

我在 WPF 中有一个带有自动生成列的 DataGrid。 如何禁用遵循 MVVM 模式的所有行的排序功能? 我在 WPF 中有一个带有 自动生成 列的 DataGrid。 如何禁用遵循 MVVM 模式的所有行的排序功能? <DataGrid AutoGenerateColumns="True" ItemsSource="{Binding MyList}"> </DataGrid> 在 dataGrid 上设置 CanUserSortColumns="False",这将禁用所有列的排序。 <DataGrid AutoGenerateColumns="True" ItemsSource="{Binding MyList}" CanUserSortColumns="False"> </DataGrid>

回答 1 投票 0

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