如何搭建新的WPF项目框架

2019-12-26 13:02:37丽君
  • {   CustomViewModel vm = content.DataContext as CustomViewModel;  
  • vm.CloseEvent += (obj) =>   {  
  • if (content.DataContext.Equals(obj))   {  
  • window.Close();   }  
  • };   }  
  •   #region 注册关闭事件  

    (2)开始剖析 public static void ShowDiaglogUc(string title, object[] constructors = null, bool isDialog = false) where T : UserControl 函数中的 constructors 参数

    在开始剖析 constructors 之前先让我们 联想一下应用场景(可以先想下,QQ的聊天窗口,例如群聊天吧,所有的群聊天都是相同界面,也就是说他们所对应的VM应该是统一类型的      VM,如果我们双击群,则会弹出对应相应的聊天窗口,正常的思维是会给聊天窗口传递参数也就是组ID 这时候我们的VM就需要构造参数了,还有一个问题就是每个群组聊天窗口只能有一个,总不能每次双击就new一个聊天窗口了吧 所以这时候我们就需要做缓存了,) 综上constructors参数在配合ViewModelFactory中的 public static T GetViewModel(object[] data,string id) where T : ViewModelBase 方法 可以解决我们VM中需要传递参数的问题,windowManager 可以解决窗口缓存问题(如果你现在还看不明白请 仔细看上面代码(虽然代码有点渣),如果实在看不明白可以在留言板吐槽)。

    1、 开始 剖析 public static CustomDialogResult ShowOkCancleUC(string title, MsgBoxBtn okCancle, out object data) where T : Control

    (1)开始剖析该函数前让我们 新建一个自己的带返回值的 ShowDialog 窗口

    新建xaml窗口

     

     
    1. <controls:BaseWindow x:Class="Common.OkCanleWindow"  xmlns="http://www.easck.com/winfx/2006/xaml/presentation" 
    2. xmlns:controls="clr-namespace:Controls;assembly=Controls"  xmlns:x="http://www.easck.com/winfx/2006/xaml" 
    3. Title="MessageBoxWindow">  <Grid x:Name="grid"> 
    4. <Grid.RowDefinitions>  <RowDefinition/> 
    5. <RowDefinition Height="50"/>  </Grid.RowDefinitions> 
    6. <Grid.ColumnDefinitions>  <ColumnDefinition/> 
    7. <ColumnDefinition/>  </Grid.ColumnDefinitions> 
    8. <Button Content="确 定" x:Name="okBtn" Click="okBtn_Click" Grid.Row="1" Height="30" Width="120" HorizontalAlignment="Right" Margin="0 0 10 0"/>  <Button Content="取 消" x:Name="canleBtn" Click="canleBtn_Click" Grid.Row="1" Grid.Column="1" Height="30" Width="120" HorizontalAlignment="Left" Margin="10 0 0 0"/>