Prism是一个用于在WPF,Windows 10 UWP和Xamarin Forms中构建松散耦合,可维护和可测试的XAML应用程序的框架。
我目前正在开发一个类似 MSPaint 的 WPF 应用程序的项目。然而,我不使用铅笔工具或类似的东西绘画,而是使用物体(矩形、圆形、三角形等)......
我有一个 .Net 9 MAUI 项目,带有简单的 View\ViewModel 设置并使用编译的绑定... 我有一个 .Net 9 MAUI 项目,具有简单的 View\ViewModel 设置并使用编译的绑定... <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="MAUI.Pages.Views.PageView" ... xmlns:viewModels="clr-namespace:MAUI.Pages.ViewModels" x:DataType="viewModels:MainPageViewModel" > 在视图中,我有一个用于过滤列表的输入控件,我想在输入文本时触发 ViewModel 中的 DelegateCommand... <Entry x:Name="filterText" Grid.Column="1" IsVisible="true" Placeholder="Search here" ClearButtonVisibility="WhileEditing" TextColor="White" PlaceholderColor="White" HorizontalOptions="FillAndExpand"> <Entry.Behaviors> <prism:EventToCommandBehavior EventName="TextChanged" Command="{Binding FilterTextChangedCommand}" CommandParameter="{Binding Path=Text, Source={x:Reference filterText}, x:DataType={x:Null}}" /> </Entry.Behaviors> 在 ViewModel 中我定义了事件, private async Task onFilterTextChangedCommand(object obj) { _logger.Debug(""); if (obj != null) { searchText = obj as string; ApplyFilters(searchText); } else { await RefreshList(); } } 如果我没有在 CommandParameter 上指定 x:DataType={x:Null} ,则 VS 显示警告 “Binding: Property "Text" not found on "MAUI.Pages.ViewModels.MainPageViewModel" 我理解这一点页面的编译绑定是到 MainPageViewModel 的,文本路径不是它的属性。 但是,当我指定 x:DataType={x:Null} 时,我收到以下警告,“如果 x:DataType 不显式为 null,则可以编译绑定以提高运行时性能......” 我的问题是如何在 CommandParameter 中为条目控件的 Text 属性指定 x:DataType 以阻止 VS 发出有关已编译绑定(和“提高性能”)的警告,同时仍保持 Command 绑定本身到 ViewModel 的 DelegateCommand? 我使用 PrismLibrary 来实现 EventToCommandBehavior,但 MAUI 社区工具包具有相同的功能并抛出相同的警告。 该页面适用于为 CommandParamter 定义的 x:DataType={x:Null},但我想知道在这种情况下“正确”的方法是什么。 正如前面评论中提到的,正确的DataType是x:DataType="Entry"。
我试图阻止用户在 prism xamarin 表单上后退导航。 我遇到了困难,因为当我收到事件时,应用程序会更改页面。 如何阻止棱镜上的返回导航
如何使用 Prism 在 WPF 应用程序中(最好)在选项卡中实现范围服务?
我正在使用 Prism 框架创建 WPF 应用程序,并且遇到了依赖项注入范围的问题。我的应用程序包含多个选项卡(至少现在有 2 个),每个选项卡都有相同的
应用自定义样式时 Silverlight 4 + PRISM 中出现错误
情况: 带有 App.xaml 的“Shell”项目和 Styles/Default.xaml 中的资源字典,其中有趣的部分如下: 默认.xmal 情况: “Shell”项目,包含 App.xaml 和 Styles/Default.xaml 中的资源字典,其中包含有趣的部分: 默认.xmal <ResourceDictionary <Style x:Key="StandardTextBox" TargetType="TextBox"> ... </Style> </ResourceDictionary 应用程序.xaml <Application> <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Styles/Default.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> </Application> 在模块项目中,我有一个表单: <TextBox Style="{StaticResource StandardTextBox}" /> 在运行时,我收到臭名昭著的“错误 HRESULT E_FAIL 已从对 COM 组件的调用返回”。例外。 有趣的是,在设计时,在VS中,样式在设计模式下应用得很好。 (VS.Net 如何发挥神奇作用,知道 Shell 项目中的 App.xaml 中有一个资源(模块项目根本没有引用该资源)令人费解……但我离题了) 我的总体目标是在 Shell 项目中与 App.xaml 分开的文件中定义资源,并在模块项目中本质上应用样式。 真正的问题是不包括另一个引用的样式。请参阅这个。
如何解析在 IContainerRegistry 中注册的同一接口的多个实例子级?
我是 Prism 中的新手,特别是 .NET 环境中的新手。 这是围绕问题的简要描述: 我有一个由多个接口(IRobot、IHuman、IElf、IVampire、ISaiyan)组成的层次结构子...
将 Xamarin Forms 迁移到毛伊岛,它可以在调试模式下工作,但不能在发布模式下工作?
我正在将 xamarin 表单迁移到 Maui 应用程序中,并且正在使用 Visual Studio Mac,我能够在调试模式下运行该应用程序,没有任何问题,但无法在发布模式下运行该应用程序。 我正在使用...
我花了一天时间查看有关此主题的其他问题,但无法使此特定代码正常工作。 背景:我们使用 Prism 自动注册视图的视图模型并使用
如何使用 MVVM/PRISM 模式在数据网格上触发 OnPropertyChanged 事件
我有一个绑定到视图模型的 DataGrid,它具有 ObservableCollection 的 ItemSource。 ObservableCollection 又通过 EF / DbContext 绑定到 SQL Server 数据库。 我可以添加...
我想将异步方法链接到 Xamarin.Forms 中 prism 框架中的委托命令,我的问题是如何做到这一点? 下面的解决方案正确吗?是否存在任何陷阱? (死锁、UI 缓慢或
我真的需要更多关于造成这种情况的想法,目前它让我陷入困境。 我有一个 Xaml 用户控件,其中包含另一个用户控件,如下所示: 我真的需要更多关于造成这种情况的想法,目前它让我陷入困境。 我有一个 Xaml 用户控件,其中包含另一个用户控件,如下所示: <UserControl x:Class="MyModule.View.MainView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:igDock="http://infragistics.com/DockManager" xmlns:views="clr-namespace:MyModule.View" > <StackPanel x:Name="panel"> <views:MyHeaderView/> <igDock:XamDockManager x:Name="dockingManager"/> </StackPanel> </UserControl> 这是在 Prism 模块内(因此是 MyModule 名称),但除此之外我不认为这有什么特别不寻常的地方。 现在,只要我向标题视图添加名称,代码就无法编译,例如 <views:MyHeaderView x:Name="header"/> 我得到的错误很简单: "The type name 'View' does not exist in the type MyModule.MyModule'" 我尝试将包含的用户控件移动到另一个命名空间中,创建一个空白用户控件并尝试使用它(相同的结果)并删除 XamDockManager,但似乎没有任何区别。 有人能解释一下吗? 我想我找到了答案。 如果我将模块类重命名为 MyModuleThingy,则它可以编译。似乎出现问题是因为模块类与包含它的命名空间具有相同的名称(MyModule.MyModule)。 如果有人能让我知道为什么这可能是一个问题,我很想知道。特别是因为我继承了很多代码,这似乎是 Prism 的特定实现中的常见模式。 问题是您有一个同名的类和命名空间。如果你有类似的东西: namespace MyModule { public class MyModule { } public class MyView { } public class MyControl { public void Foo() { MyModule.MyView v = ..; } } } v之前的类型会认为MyView是在MyModule类型中作为嵌套类型。它不会将 MyModule 解析为命名空间,因为该类型基于 C# 的类型解析规则而获胜。 背后生成的代码只是采用您在 xmlns 中定义的命名空间,并在创建支持字段时将其添加到前面(由于 x:Name 属性)。所以你最终得到 MyModule.View.MyHeaderView,其中 MyModule 被解释为类型,而不是命名空间。 我很不幸地把我的项目称为 TextEditor,显然这个名称与现有的 MS 类冲突。我尝试将 x.Name 或 Name 属性添加到对用户控件的引用时出现编译错误,抱怨编译器找不到我的用户控件。 显然它正在研究 MS 课程,而不是本地项目。 我将项目重命名为 TextEditorProject,必须使用 Grep 来查找所有出现的情况,但最终,我让它工作了。 你是否有一个名为“View”的类,与命名空间相同? WPF 不喜欢您使用 x:Name 作为程序集中定义的控件,假设 xmlns:views="clr-namespace:MyModule.View" 与您的程序集相同 用名字代替,就可以了
当将WindowStartuPlocation设置为Manual时,未设置或顶部和顶部。(在wpf棱镜库中)
设置弹出对话框样式如下所示。 <Setter Property="WindowStyle" Value="...</desc> <question vote="1"> <p>设置弹出对话框样式如下所示。</p> <pre><code><prism:Dialog.WindowStyle> <Style TargetType="{x:Type Window}"> <Setter Property="WindowStyle" Value="None" /> <Setter Property="prism:Dialog.WindowStartupLocation" Value="Manual" /> <Setter Property="Left" Value="0"/> <Setter Property="Top" Value="0"/> <Setter Property="ResizeMode" Value="NoResize"/> <Setter Property="ShowInTaskbar" Value="False"/> <Setter Property="SizeToContent" Value="WidthAndHeight"/> <Setter Property="ShowActivated" Value="False"/> </Style> </prism:Dialog.WindowStyle> <Grid> <Button/> </Grid> </code></pre> <p>但是,如果显示对话框,它会弹出到所有者中心位置。 我该如何解决这个问题?</p> <p>我在onDialogopened事件中强行输入了Left和Top属性,但是没有作用,因为还是弹窗。 当按下另一个按钮时,我确认它在设置“Left”和“Top”时起作用,但我想要的是在弹出时立即在设置为“Manual”的位置弹出。</p> </question> <answer tick="false" vote="0"> <p>请不要使用默认的 Prism 对话框窗口,而是注册并使用自定义对话框窗口。</p> <pre><code> <Window x:Class="MyDialog.Views.CustomDialogWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:prism="http://prismlibrary.com/" prism:ViewModelLocator.AutoWireViewModel="True"> <Grid> </Grid> </Window> </code></pre> <p>xaml</p> <pre><code>namespace MyDialog.Views { public partial class CustomDialogWindow : Window, IDialogWindow { public CustomDialogWindow() { InitializeComponent(); } public IDialogResult Result { get; set; } } } </code></pre> <p>xaml.cs</p> <pre><code>namespace MyDialog.ViewModels { public class CustomDialogWindowViewModel : BindableBase, IDialogAware { public string Title => throw new NotImplementedException(); public event Action<IDialogResult> RequestClose; public CustomDialogWindowViewModel() { } public bool CanCloseDialog() { return true; } public void OnDialogClosed() { } public void OnDialogOpened(IDialogParameters parameters) { } protected void RaiseRequestClose(IDialogResult dialogResult) { RequestClose?.Invoke(dialogResult); } private DelegateCommand _closeDialogCommand; public DelegateCommand CloseDialogCommand => _closeDialogCommand ?? (_closeDialogCommand = new DelegateCommand(ExecuteCloseDialogCommand)); void ExecuteCloseDialogCommand() { RaiseRequestClose(new DialogResult(ButtonResult.OK)); } } } </code></pre> <p>视图模型</p> <pre><code>public void RegisterTypes(IContainerRegistry containerRegistry) { containerRegistry.RegisterDialog<MyDialogView, MyDialogViewModel>(); containerRegistry.RegisterDialogWindow<CustomDialogWindow>(); } </code></pre> <p>注册窗口和对话框视图然后使用</p> <pre><code> _dialogService.Show("MyDialogView", new DialogParameters(), r =>(){ }); </code></pre> </answer> </body></html>
Serilog 与 Prism 8 一起使用并注入 Microsoft.Extensions.Logging.ILogger
结合使用 .Net 5 WPF、Serilog 和 PrismLibrary 8 有人可以指导我正确的方向,以便我可以将 Microsoft.Extensions.Logging.ILogger 注入 ViewModels 等。 我发现了很多
动态生成的DataGrid第二次单击CheckBox在WPF中不起作用
问题 1:我在动态生成的 DataGrid 中双击时遇到了众所周知的问题。我的第一列带有复选框。需要单击两次才能进行选择/取消选择。 为了...
我正在尝试让 Android 硬件后退按钮在 prism Maui 应用程序上工作。这似乎已经成为一个问题有一段时间了,而且可能仍然是一个问题。 (如果...请纠正我
Prism-WPF 相当于 Silverlight 的:CompositionInitializer 类和 SatisfyImports()
我正在使用 Prism-MEF-WPF,有时我需要从 XAML 构建视图模型 视图的,所以容器不参与,无法进行依赖注入 自动(因为那里...
Maui Prism .CreateWindow() 导航错误
我正在努力将 Xamarin.Forms 应用程序迁移到毛伊岛。在 MauiProgram 中,我们在 PrismAppBuilder 上调用 MauiAppBuilder.UsePrism(),我们调用 .RegisterTypes() 来注册服务和导航页面...
我对前端有点陌生。 最近,我使用基于 Next.js、tailwind 和 React 的模板创建了博客。 当我输入 UTF-8 文本(韩语)时,文本从移动设备上的父框架中弹出。 可以...
Prism 的 INavigationParameters 的本地毛伊岛等效项?
所以目前正在努力将我们的移动应用程序从 xamarin 重构为 maui。在xamarin应用程序中,我们使用prism进行导航,但我们想停止使用prism。对于导航,我们遵循 Max Borrmanns
我有一个登录序列在基于 prism 的 WPF 应用程序中工作,该应用程序在显示主窗口之前显示登录屏幕。在我的 Bootstrapper 类中,InitializeShell 方法如下所示 ...