zoukankan      html  css  js  c++  java
  • WPF委托实现方法回调(刷新父窗体)

    MainWindow.xaml(父窗体)

    <StackPanel>
        <Label Content="{Binding Message}"/>
        <Button Content="Input User Name" Command="{Binding OpenSubWindowCommand}"/>
    </StackPanel>

    MainWindow.xaml.cs

    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = new MainWindowViewModel();
    }

    MainWindowViewModel.cs

    class MainWindowViewModel : INotifyPropertyChanged
    {
        string message;
    
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    
        public string Message
        {
            get => message;
            set
            {
                message = value;
                OnPropertyChanged("Message");
            }
        }
    
        public ICommand OpenSubWindowCommand { get; set; }
    
        public MainWindowViewModel()
        {
            OpenSubWindowCommand = new CommandHandler(OpenSubWindow);
        }
    
        void OpenSubWindow()
        {
            SubWindow subWindow = new SubWindow((name) => { Message = $"hello {name}"; });
            subWindow.Show();
        }
    }

    SubWindow.xaml(子窗体)

    <StackPanel>
        <TextBox Text="{Binding Name}"/>
        <Button Content="Send" Command="{Binding SendCommand}"/>
    </StackPanel>

    SubWindow.xaml.cs

    public SubWindow(Action<string> callback)
    {
        InitializeComponent();
        this.DataContext = new SubWindowViewModel(callback, this);
    }

    SubWindowViewModel.cs

    class SubWindowViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
    
        void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    
        string name;
        public string Name
        {
            get => name;
            set
            {
                name = value;
                OnPropertyChanged("Name");
            }
        }
    
        Action<string> Callback { get; set; }
        SubWindow Window { get; set; }
    
        public SubWindowViewModel(Action<string> callback, SubWindow window)
        {
            SendCommand = new CommandHandler(Send);
            Callback = callback;
            Window = window;
        }
    
        public ICommand SendCommand { get; set; }
    
        void Send()
        {
            if (Callback != null)
            {
                Callback(name);
                Window.Close();
            }
        }
    }
    把圈子变小,把语言变干净,把成绩往上提,把故事往心里收,现在想要的以后你都会有。
  • 相关阅读:
    Win7+IIS伪静态 UrlRewriter配置
    让VS2010打包工具找回丢失的.net 2.0 .
    高效注册DLL控件 让你的IE浏览器复活
    查询及删除重复记录的方法
    .NET代码模板生成工具CodeSmith 5.0.1 专业版完美版下载
    如何使用CslaGen生成CSLA DAL层代码
    用C# + WebBrowser控件抓取AJAX页面的内容[转]
    了解IIS6应用程序池假死问题解决办法
    美化界面2
    C# WebBrowser高级应用
  • 原文地址:https://www.cnblogs.com/jizhiqiliao/p/15766668.html
Copyright © 2011-2022 走看看