using CommunityToolkit.Mvvm.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.UI.Xaml;
namespace MultiplePagesSingleViewModel;
public partial class App : Application
{
private Window? window;
public App()
{
this.InitializeComponent();
Ioc.Default.ConfigureServices(
new ServiceCollection()
// This needs to be Singleton
.AddSingleton<MainViewModel>()
.BuildServiceProvider());
}
protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
{
this.window = new MainWindow();
this.window.Activate();
}
}
using CommunityToolkit.Mvvm.DependencyInjection;
using Microsoft.UI.Xaml.Controls;
namespace MultiplePagesSingleViewModel;
public sealed partial class Page1 : Page
{
public Page1()
{
this.InitializeComponent();
// This MainViewModel is the same instance that Page2 gets.
ViewModel = Ioc.Default.GetRequiredService<MainViewModel>();
}
public MainViewModel ViewModel { get; }
}
using CommunityToolkit.Mvvm.DependencyInjection;
using Microsoft.UI.Xaml.Controls;
namespace MultiplePagesSingleViewModel;
public sealed partial class Page2 : Page
{
public Page2()
{
InitializeComponent();
// This MainViewModel is the same instance that Page1 gets.
ViewModel = Ioc.Default.GetRequiredService<MainViewModel>();
}
public MainViewModel ViewModel { get; }
}
主视图模型.cs
using CommunityToolkit.Mvvm.ComponentModel;
namespace MultiplePagesSingleViewModel;
// This class needs to be "partial" for CommunityToolkit.Mvvm.
public partial class MainViewModel : ObservableObject
{
[ObservableProperty]
// The CommunityToolkit.Mvvm will automatically generate
// a UI-Interactive "SomeText" property for you.
private string someText = "Default text";
}
2条答案
按热度按时间utugiqy61#
在这个示例代码中,我有2个页面(
Page1
和Page2
)和1个ViewModel(MainViewModel
)。每个页面都有一个TextBox
,它们绑定到MainViewModel
中的同一个属性。如果您更改
Page1
中的文本,则Page2
中的文本也将更改,反之亦然。NuGet软件包
应用程序.xaml.cs
第一页. xaml
第一页. xaml.cs
第二页. xaml
第二页. xaml.cs
主视图模型.cs
主窗口.xaml
yhxst69z2#
好吧,终于经过两个星期的研究,我找到了一个解决办法。
解决方案基本上是从不同的类中引发和捕获事件。
我已经创建了CustomEventArgs类,然后publisher类就是我的控制器(.cs),我的订阅者是模型(.xaml.cs).我遇到的唯一问题是将所有方法和属性设置为静态以便能够从其他模型调用控制器函数.问题是在publisher类中的
raiseEvent(this, e);
上,this
不能是静态的,所以我写了null
。此外,我想说的是,它的工作非常流畅,没有滞后或延迟,即使我经常使用它。
我希望这对遇到同样问题的每个人都有帮助。