Model-View-ViewModel(MVVM)是一种架构设计模式,用于实现用户界面,通过其表示逻辑(其ViewModel)将UI(View)与其数据(Model)分开。
WinUI:ICommand 实现 - CanExecuteChanged 为 null 并且 UI 未刷新
请参阅代码示例。启动时,CanExecuteButtonClick 方法将被评估一次。执行 CanExecuteButtonClick 方法时,将评估 CanClick 属性。我…
我有一个 .NET 8 wpf 应用程序,它使用 Microsoft Community Toolkit 进行 MVVM 和 Microsoft 扩展依赖项注入以及 EF-Core 框架。 除了视图和视图模型我...
使用CommunityToolkit.Mvvm生成“必需”属性
我在我的 WPF 项目中使用 CommunityToolkit.Mvvm。 像往常一样,我仅声明我的私有支持字段,并在其上添加 [ObservableProperty] 属性。我想要一些生成的
我已经开始编写一个 iOS 应用程序,它调用各种 Web 服务调用来连接到数据库中的数据并进行身份验证等。 我想知道构建该项目的好方法,特别是......
iOS 开发:如何从模型中动态填充 swift 中的“标签”字段?
这是我在 GitHub 上的代码,其中包含我正在尝试完成的任务和当前拥有的任务的屏幕截图。 我跟着这个 YouTube 视频想出了我现在所拥有的。 使用来自此 api 的数据,我
为什么 SwiftUI 中 View 不持有带有 @Observable 的 ViewModel?
我正在尝试使用@Observable,但我注意到View并没有使用@State来保持ViewModel。每当 ContentView 中发生变化时,就像 TextField 中的字母一样,
如何正确处理flutter中的ProviderNotFoundException?
我在我的应用程序中使用 MVVM 架构,使用简单的(自制)Provider(不是包 Provider,但问题是相同的)和静态 Provider.of(BuildContext context)方法,其中 T
如何使用 MVVM 使用 @ObservedObject 触发自动 SwiftUI 更新
我有一个关于 SwiftUI 和 MVVM 结合的问题。 在开始之前,我读过一些讨论 SwiftUI 和 MVVM 的结合是否有必要的文章。但我不想...
我想更改该代码以与 MVVM 兼容。 下面的代码带有代码隐藏 我想更改该代码以与 MVVM 兼容。 下面的代码带有代码隐藏 <Button x:Name="sevenBtn" Grid.Row="2" Grid.Column="0" Click="NumberBtn_Click" Content="7" Style="{StaticResource numberButtonsStyle}" /> private void NumberBtn_Click(object sender, RoutedEventArgs e) { int selectedValue = int.Parse((sender as Button).Content.ToString()); } 我使用 CommunityToolkit.Mvvm、Microsoft.Xaml.Behavior.Wpf 有人可以帮助我吗? 谢谢 在 MVVM 中发送对象。 这是一个简单的示例代码: 左侧:如何实现数字按钮。 右侧:如何使用CommunityToolkit.Mvvm的另一个示例代码。 MainWindowViewModel.cs using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; namespace WpfAppTests; public partial class MainWindowViewModel : ObservableObject { [RelayCommand] private void UpdateNumber(string numberString) { if (int.TryParse(numberString, out int number) is true) { Number = number; } } [ObservableProperty] private int number; [ObservableProperty] private string someText = string.Empty; [RelayCommand] private void UpdateText(string text) { SomeText = text; } } MainWindow.xaml <Window x:Class="WpfAppTests.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:WpfAppTests" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Title="MainWindow" Width="800" Height="450" mc:Ignorable="d"> <Window.DataContext> <local:MainWindowViewModel /> </Window.DataContext> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <!-- Your number button sample code. --> <StackPanel Grid.Column="0"> <Button Command="{Binding UpdateNumberCommand}" CommandParameter="{Binding Content, RelativeSource={RelativeSource Self}}" Content="5" /> <TextBlock Text="{Binding Number}" /> </StackPanel> <!-- Simple sample code of how to use the CommunitToolkit.Mvvm. --> <StackPanel Grid.Column="1"> <TextBox x:Name="InputTextBox" /> <Button Command="{Binding UpdateTextCommand}" CommandParameter="{Binding ElementName=InputTextBox, Path=Text}" Content="Update text" /> <TextBlock Text="{Binding SomeText}" /> </StackPanel> </Grid> </Window>
我正在使用 WPF MVVM、Caliburn Micro 和 WCF 服务构建我的第一个生产应用程序。 我已经到了需要 ViewModel 来跟踪模型内各个属性的变化的地步。我...
我正在使用 WPF MVVM、Caliburn Micro 和 WCF 服务构建我的第一个生产应用程序。 我已经到了需要 ViewModel 来跟踪模型内各个属性的变化的地步。我...
根据 Google 自己的架构示例,他们使用视图模型作为可组合项的输入变量。 @OptIn(ExperimentalLifecycleComposeApi::class) @可组合 有趣的任务详细屏幕(
更改 FlyoutPage。通过 ViewModel 单击按钮上的详细信息页面
情况 我有基本的 FlyoutPage,其中有一些带有菜单按钮和主页作为详细信息的弹出窗口 情况 我有基本的 FlyoutPage,其中有一些带有菜单按钮和主页作为详细信息的弹出窗口 <FlyoutPage ...> <FlyoutPage.Flyout> <generalModule:MenuFlyout x:Name="flyoutPage" /> </FlyoutPage.Flyout> <FlyoutPage.Detail> <NavigationPage> <x:Arguments> <local:MainPage /> </x:Arguments> </NavigationPage> </FlyoutPage.Detail> </FlyoutPage> FlyoutPage.Flyout中的按钮正在触发命令 <ContentPage ...> <Grid WidthRequest="320" RowDefinitions="Auto,Auto" ColumnDefinitions="*" Margin="5"> <toolkit:Expander Grid.Row="0"> <toolkit:Expander.Header> <Label Text="MyPages" Style="{StaticResource MenuHeadline}"/> </toolkit:Expander.Header> <Grid RowDefinitions="Auto,Auto,Auto,Auto" ColumnDefinitions="*" RowSpacing="1"> <Button Text="Page1" Command="{Binding NavigateToPageCommand}" CommandParameter="Page1" Grid.Row="0" Style="{StaticResource MenuButton}"/> <Button Text="Page2" Command="{Binding NavigateToPageCommand}" CommandParameter="Page2" Grid.Row="1" Style="{StaticResource MenuButton}"/> </Grid> </toolkit:Expander> </Grid> </ContentPage> 该命令正在ViewModel中运行方法: public class ViewModelCommands : ViewModel { public ViewModelCommands() : base() { } public ICommand NavigateToPageCommand { get; private set; } public override void Init() { base.Init(); NavigateToPageCommand = new Command((page) => NavigateToPage((string)page), (page) => true); } } VM中的方法应该以某种方式替换FlyoutPage.Detail 问题 以上所有绑定均按预期工作。问题是我该如何改变FlyoutPage.Detail...上述方法是否可行,还是应该以其他方式完成? VM本身无法了解Model中的Details,因此无法直接更新/替换它。 方法 (4) 可以更新 xaml/代码隐藏中绑定的某些属性,但我不知道如何(或者如果可能的话)绑定到: <FlyoutPage.Detail> <NavigationPage> <x:Arguments> <local:MainPage /> </x:Arguments> </NavigationPage> </FlyoutPage.Detail> 另外,在VM中创建NavigationPage并绑定到它似乎不是一个好主意。 Clicked 方法位于 FlyoutPage.Flyout (2) 中,并且必须以某种方式更新 FlyoutPage (1) 中的 Details,因此看起来不太吸引人。此外,我想尽可能远离代码隐藏。 我想根据 MVVM 进行操作,但欢迎任何可行的解决方案。 总结 我需要在单击按钮时更改FlyoutPage.Detail 最好使用命令并严格遵守 MVVM(如果可能) 我想知道如何在 xaml 或代码隐藏中以某种方式绑定它 也许是代码隐藏的一些直接更改,但这将涉及从第二页更改一个页面的属性 也许有一种方法可以从命令返回正确的页面并替换它 您可以直接在代码后面执行此操作,就像FlyoutPage docs所说的那样。虽然您可以在 ViewModel 中实现 Button Command,但 Flyout.Detail 不可绑定。所以,你无法通过 ViewModel 中的绑定来替换整个页面。 让我们简化 Flyout Menu 页面。这是一个名为 button1 的按钮,用于替换 Detail 页面。 <Grid WidthRequest="320" RowDefinitions="Auto,Auto" ColumnDefinitions="*" Margin="5"> <Grid RowDefinitions="Auto,Auto,Auto,Auto" ColumnDefinitions="*" RowSpacing="1"> <Button x:Name="button1" x:FieldModifier="public" Text="Page1" Grid.Row="0" /> ... </Grid> </Grid> 并且在后面的FlyoutPage代码中,我们订阅button1的Clicked事件来替换Detail, public MyFlyoutPage() { InitializeComponent(); flyoutPage.button1.Clicked += OnButtonClicked; ... } private void OnButtonClicked(object sender, EventArgs e) { var button = (Button)sender; string text = button if(text != null) { if (text == "Page1") { Detail = new NavigationPage(new MainPage()); } else { Detail = new NavigationPage(new NewPage1()); } } } 更多按钮也是如此。
是否可以直接在 XAML 中与 Visual Studio REST 客户端服务代码生成器生成的对象进行双向数据绑定?
是否可以或实用将 XAML 中的 2 路数据绑定直接连接到基于 OpenApi 元数据文件的 Visual Studio 生成的 RESTApi。例如,Visual Studio 生成一个 REST 客户端,b...
如何在MAUI ListView或CollectionView中显示行号?
我有一个带有 ViewModel 的 MAUI 页面,其中包含一个字符串类型的数组。数组字段的名称是 Ingredients。这就是我尝试显示该字段的方式: 我有一个带有 ViewModel 的 MAUI 页面,其中包含一个 string 类型的数组。数组字段的名称是Ingredients。这就是我尝试显示该字段的方式: <CollectionView ItemsSource="{Binding Ingredients}"> <CollectionView.ItemTemplate> <DataTemplate> <StackLayout Orientation="Horizontal" Padding="5"> <Label Text="..." FontAttributes="Bold" VerticalOptions="Center"/> <Label Text="{Binding .}" VerticalOptions="Center" Margin="10,0,0,0" /> </StackLayout> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView> 但是我如何在第一个标签中显示行索引? 所以输出应该是: 1 Item1 2 Item2 3 item3 常见的方法是使用 ItemToIndexConverter,但是,这有以下缺陷: 对于大型列表效率不高,O(N^2) 您的用例要求索引从 1 开始(通常是 0) 无论如何,为了让您开始,您可以在 XAML 中编写以下内容: <Label FontAttributes="Bold" Text="{MultiBinding {Binding Ingredients, Source={Reference mainPage}}, {Binding .}, Converter={local:IndexToItemConverter}}" VerticalOptions="Center" /> 然后,您可以按如下方式实现 IndexToItemConverter: public class IndexToItemConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) => values[0] is ObservableCollection<string> c && values[1] is string s ? c.IndexOf(s) : -1; public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) => throw new NotImplementedException(); }
我是 xamarin mvvm patter 的初学者。目前,我正在尝试创建一个搜索栏,从名称列表中搜索单词。我尝试在我的视图模型上编写一些关于命令函数的代码,然后...
带有标题“*”的 DataGridColumn 已存在于 DataGrid 的 Columns 集合中
我有一个采用 MVVM 模式的 WPF 应用程序。在我的一种观点中,我必须绑定一个 ObservableCollection 来查看。在该视图中,我有一个 ListBox 和一个 DataGrid 都绑定到同一个 ObservableColl...
如何按显示的、转换的值、未绑定源属性值对DataGridTextColumn进行排序?
如何按显示的、转换的值而不是绑定源属性值对 WPF DataGridTextColumn 进行排序?现在它按行视图模型中的整数值排序,而不是显示转换器返回的文本。我用...
从ViewModel调用View的CodeBehind中的方法?
我的视图背后的代码中有一个方法(这个方法对我的用户界面做了一些事情)。 不管怎样,我想从我的 ViewModel 触发这个方法。这怎么能做到呢?
net maui 弹出窗口超出了 MVVM 应用程序的控制范围?
我正在尝试使用工具包:来自CommunityToolkit的Popup,但是当从xaml渲染控件时,它们会扩展到控件可见区域的“外部”(参见屏幕截图)? 我正在尝试使用工具包:来自 CommunityToolkit 的 Popup,但是当从 xaml 渲染控件时,它们会扩展到控件可见区域的“外部”(参见屏幕截图)? <?xml version="1.0" encoding="utf-8" ?> <toolkit:Popup xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit" x:Class="MyApp.Controls.AlertPopup"> <Grid BackgroundColor="#333333" WidthRequest="150" Margin="20"> <Grid.ColumnDefinitions> <ColumnDefinition Width="auto" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <Label Grid.Column="0" Grid.Row="0" Text="My title" /> <Label Grid.Column="0" Grid.Row="1" Text="lorem ipsum dolor amet lorem ipsum dolor amet lorem ipsum dolor amet " /> <Button Grid.Column="0" Grid.Row="2" Text="Continue" /> </Grid> </toolkit:Popup> 在 MVVM 视图模型中显示弹出窗口 [ICommand] async Task DisplayPopup() { Shell.Current.CurrentPage.ShowPopup(new MyApp.Controls.AlertPopup()); } 您可以在 Maui 弹出窗口中使用元素属性的 Size。 获取或设置弹出窗口显示的大小。除非指定了 Size,否则 Popup 将始终尝试将 Popup 的实际大小限制为 View 的大小。如果 Popup 使用非默认值的 HorizontalOptions 或 VerticalOptions 属性,则需要此 Size 属性。 更新 对于网格,我发现 widthrequest 控制弹出窗口宽度,但 <ColumnDefinition Width="auto" /> 控制文本和元素宽度。因此,您需要设置 ColumnWidth 以匹配弹出窗口的宽度。