Mahapps 1.3 对话框和 Avalon.Wizard

2024-04-04

我已经集成了流行的 UI 库Mahapps http://mahapps.com/阿瓦隆精灵 https://avalonwizard.codeplex.com/控制。

它集成得很好,但我对 Mahapps 对话框有疑问。 Wizard 控件定义了一个初始化命令处理向导页面上的输入。

显然,在初始化附加到视图的依赖属性(DialogParticipation.Register)之前,会触发InitializeCommand。

这会导致以下错误:

Context is not registered. Consider using DialogParticipation.Register in XAML to bind in the DataContext.

提供了重现该问题的示例项目here https://github.com/codingdna2/MahappsWithAvalonWizard/.

关于如何解决这个问题有什么建议吗?


页面 Xaml 不是在初始化命令中创建的,因此此时您无法使用 DialogCoordinator。

这是一个带有 LoadedCommand 的自定义接口,您可以在 ViewModel 中实现它并在后面的 Xaml 代码中调用它。

public interface IWizardPageLoadableViewModel
{
    ICommand LoadedCommand { get; set; }
}

视图模型:

public class LastPageViewModel : WizardPageViewModelBase, IWizardPageLoadableViewModel
{
    public LastPageViewModel()
    {
        Header = "Last Page";
        Subtitle = "This is a test project for Mahapps and Avalon.Wizard";

        InitializeCommand = new RelayCommand<object>(ExecuteInitialize);
        LoadedCommand = new RelayCommand<object>(ExecuteLoaded);
    }

    public ICommand LoadedCommand { get; set; }

    private async void ExecuteInitialize(object parameter)
    {
        // The Xaml is not created here! so you can't use the DialogCoordinator here.
    }

    private async void ExecuteLoaded(object parameter)
    {
        var dialog = DialogCoordinator.Instance;
        var settings = new MetroDialogSettings()
        {
            ColorScheme = MetroDialogColorScheme.Accented
        };
        await dialog.ShowMessageAsync(this, "Hello World", "This dialog is triggered from Avalon.Wizard LoadedCommand", MessageDialogStyle.Affirmative, settings);
    }
}

和视图:

public partial class LastPageView : UserControl
{
    public LastPageView()
    {
        InitializeComponent();
        this.Loaded += (sender, args) =>
        {
            DialogParticipation.SetRegister(this, this.DataContext);
            ((IWizardPageLoadableViewModel) this.DataContext).LoadedCommand.Execute(this);
        };
        // if using DialogParticipation on Windows which open / close frequently you will get a
        // memory leak unless you unregister.  The easiest way to do this is in your Closing/ Unloaded
        // event, as so:
        //
        // DialogParticipation.SetRegister(this, null);
        this.Unloaded += (sender, args) => { DialogParticipation.SetRegister(this, null); };
    }
}

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mahapps 1.3 对话框和 Avalon.Wizard 的相关文章

随机推荐

  • 使用 AVAudioRecorder 看似随机的文件损坏(有时文件无法播放) - iOS

    在我目前正在开发的应用程序中 我或多或少遇到了障碍 在应用程序中 您可以进入一个视图 该视图在标准表格视图中列出所有本地保存的音频文件 从这里 您可以单击它们来播放它们 或者点击下面的录制按钮来制作新的录音 该录音随后会自动保存到应用程序沙
  • Android:Listview的弹跳到scrollview

    有什么方法可以将ListView的弹跳效果添加到常规滚动视图中吗 我所说的弹跳是指当您到达列表底部时类似橡皮筋的效果 在android中为listview添加效果反弹 Step 1 在com base view包中创建新文件BounceLi
  • 在 vaadin 8 中将文本复制到剪贴板

    我想问如何在 vaadin 8 java web 应用程序中正确地将一些文本复制到剪贴板 我找到了适用于 Chrome 和 IE 的解决方案 但不适用于 Firefox Firefox 总是提示 错误 document execComman
  • JqG​​rid 单元格中的选择框

    我试图让选择框位于特定的单元格中 我的复选框显示得很好 但选择框没有显示 list5 jqGrid datatype local width 100 height 100 colNames Universe1 Connect String1
  • 从更高的时间范围获取历史值

    我构建了一个自定义指标 并使用蜡烛顶部的点绘制了它们 当一个点与另一个点满足特定标准时 我会绘制一条连接它们的趋势线 这样可行 我想做的是从更高的时间范围增加这些线 因为我通常在 5m 上进行交易 意思是 如果每日时间范围内的这些点符合标准
  • jquery加载大数据

    我有一个返回数据的 Web 服务 数据集相当大 可能有 600 行 20 列 在 Jquery 代码中将此数据加载到 html 表中最快最有效的方法是什么 我尝试通过循环返回的数据并在字符串中创建表 DOM 来创建表 html 但循环部分非
  • 遵循 JSON-LD API 中的所有链接

    假设我想使用一个返回 JSON LD 的 API 并跟踪所有链接 我正在尝试Hydra API 演示 http www markus lanthaler com hydra api demo 但它应该适用于所有 JSON LD API 而不
  • ListView 中的 WPF ListView

    我确信我错过了一些简单 明显的东西 但我似乎无法在 ListView 中绑定 ListView 的数据
  • Java 中的 Thread.Sleep 替代方案

    有人告诉我使用Thread Sleep 有时 人们希望在同步方法的操作循环中设置一些时间间隔 这是一个糟糕的解决方案 另一方面 我有两个不同的线程 它们在程序运行期间处于活动状态 还有一个共享对象 当我在该共享对象中使用 Object wa
  • 是否有像 pygccxml 一样的 Python Clang 包装器来包装 GCC-XML?

    很长一段时间以来 我一直在使用 pygccxml 来解析和内省我的 C 源代码 它帮助我在构建过程中进行一些巧妙的代码生成 最近我读了很多关于 LLVM 堆栈的好处 特别是 LLVM Clang 解析器给 C 编译带来的好处 我现在想知道
  • 如何在 Debian 上升级 glibc?

    我听说我可以使用apt get install libc6 但我需要向 etc apt sources list 添加一些内容才能接收最新的 glibc 版本 我应该怎么办 我能够安装libc6 2 17 in Debian Wheezy通
  • 3D饼图:图例太大

    传说的问题太大了 当我改变cex的数量时 字体太小 盒子仍然很大 希望盒子和测试可以搭配 不会太小也不会太大 table lt data frame num c 90 26 28 39 98 countries c India Sri La
  • Parse.com:如何为 Fragment 内的 Parse ListView 添加搜索过滤器

    我正在尝试为选项卡片段内的 ListView 添加搜索过滤器 使用适配器从解析服务器调用数据 我的片段java文件如下 跑车 java import android os Bundle import android text Editabl
  • 如何使 Hibernate @Lock 注释适用于 Oracle DB?

    我偶然发现 Oracle DB 中锁定行的问题 锁的目的是防止多个事务从数据库读取数据 因为这些数据会影响新数据的生成 并且会在事务中发生更改 为了进行锁定 我将 Lock 注释放在 SpringData find 方法上 该方法检索参与事
  • std::vector 中的每个元素访问都是缓存未命中吗?

    据了解std vector将其数据保存在堆上 因此向量本身的实例和第一个元素具有不同的地址 另一方面 std array是原始数组的轻量级包装 其地址等于第一个元素的地址 假设集合的大小足以容纳一个缓存行int32 在我的具有 384kB
  • 在 WebBrowser 控件中检测滚动到底部

    我正在创建一个 Windows 窗体来接受公司的一些条款和条件 因此 条款和条件位于 Web 上 并通过 WebBrowser 控件导航到 WinForm 仅当完整文档滚动到底部后才需要启用 接受 按钮 我正在寻找类似于 VScrollBa
  • 在 Windows Vista/7 下复制到 Program Files

    我用C 编写了一个向导 它将一些文件安装到Windows下的程序文件文件夹中 据我了解 我需要管理员权限才能在 Vista 7 下写入程序文件 所以我的问题是 有没有一种方法可以在应用程序分别运行时仅针对一个向导页面打开管理员权限 或者我是
  • 巴泽尔的$地点扩张

    我想添加 location 扩展到rules scala for jvm flags我在其中设置依赖项的属性data属性 但失败了 label src java com google devtools build lib worker in
  • CoffeeScript 类在主 javascript 中不可访问

    我有一个用咖啡脚本编写的课程 例如 class Example constructor gt each 1 2 3 key value gt test value return test render gt alert test 我把这个类
  • Mahapps 1.3 对话框和 Avalon.Wizard

    我已经集成了流行的 UI 库Mahapps http mahapps com 与阿瓦隆精灵 https avalonwizard codeplex com 控制 它集成得很好 但我对 Mahapps 对话框有疑问 Wizard 控件定义了一