(十九)IDialogService

首页添加待办与备忘录

1. 先设计弹出框的页面

尺寸与命名空间不要忘记,备忘录的把状态删掉改一下名字就行

xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes"
Width="450" Height="280"  
        <Grid.RowDefinitions>
            <RowDefinition Height="auto" />
            <RowDefinition />
            <RowDefinition Height="auto" />
        </Grid.RowDefinitions>

        <!--  边距设置先水平后垂直如果是2位  -->
        <TextBlock
            Padding="20,10"
            FontSize="20"
            FontWeight="Bold"
            Text="添加备忘录" />

        <DockPanel Grid.Row="1" LastChildFill="False">
            <TextBox
                Margin="20,0"
                md:HintAssist.Hint="请输入备忘录概要"
                DockPanel.Dock="Top" />
            <TextBox
                MinHeight="100"
                Margin="20,0"
                md:HintAssist.Hint="请输入备忘录内容"
                AcceptsReturn="True"
                DockPanel.Dock="Top"
                TextWrapping="Wrap" />
            <!--  Wrap是按字符换行,WrapWithOverflow是按空格换行。  -->
            <!--  当TextWrapping设置为"Wrap"时,输入字符串超出指定宽度后就会自动发生换行  -->
            <!--  AcceptsReturn如果文本框允许换行符,则为 true;否则为 false。 默认值为 false。  -->
        </DockPanel>

        <StackPanel
            Grid.Row="2"
            Margin="10"
            HorizontalAlignment="Right"
            Orientation="Horizontal">
            <Button
                Margin="0,0,10,0"
                Content="取消"
                Style="{StaticResource MaterialDesignOutlinedButton}" />
            <Button Content="确定" />
        </StackPanel>
    </Grid>

2. 主页的model层逻辑

  • 把测试方法删掉
  • 创建命令及方法实现
 public DelegateCommand<string> ExecuteCommand {  get;private set; }
 private void Execute(string obj)
 {
     switch (obj)
     {
         case "新增待办": AddToDo(); break;
         case "新增备忘录": AddMemo(); break;
     }
 }

 void AddToDo() 
 {
     dialog.ShowDialog("AddToDoView");
 }
 void AddMemo() 
 {
     dialog.ShowDialog("AddMemoView");
 }
  • 构造函数修改
    image

  • 调用弹窗是通过prism的IDialogSerivce依赖注入ctor

  • 所有弹窗模块都是通过依赖注入的,可以通过名称的方式找到弹窗

  • 在主页中具体的业务与模块是解耦的

  • 在app.cs里面注册
    image

3. 添加的具体逻辑实现

实现IDialogAware接口,然后todo里面也是一样

 public class AddMemoViewModel : IDialogAware
 {
     public string Title { get; set; }

     public event Action<IDialogResult> RequestClose;

     public bool CanCloseDialog()
     {
         return true;
     }
     public void OnDialogClosed()
     {            
     }
     public void OnDialogOpened(IDialogParameters parameters)
     {          
     }
 }
posted @ 2023-10-12 09:46  huihui不会写代码  阅读(105)  评论(0)    收藏  举报