首页 > 解决方案 > WPF 在事件完成后设置属性

问题描述

所以我想要在自定义事件完成后设置一些属性。

场景我有一个保存 BackupDrives 类,它收集数据,然后提供一个在完成后调用的事件。

更改对象属性可以通过单击按钮来完成,我想要在事件完成后将它们设置回相同的值。

按钮点击做的事情:

private void bbdrives_Click(object sender, RoutedEventArgs e)
    {  
        backup.SaveDrives += OnSavingDrives;
        backup.DrivesSave();
        Drive_text.Visibility = Visibility.Visible;
        drives_progres.Visibility = Visibility.Visible;
        drives_progres.IsIndeterminate = true;
    }

现在触发的事件方法无法将属性更改回来。

private void OnSavingDrives(object sender, DrivesEventArgs e)
    {
       
        Directory.CreateDirectory(....);
        File.WriteAllLines(e.Something, e.List2ToSave);
        File.WriteAllLines(e.Something_lse, e.List1ToSave);

        Drive_text.Visibility = Visibility.Collapsed;
        drives_progres.Visibility = Visibility.Collapsed;
        drives_progres.IsIndeterminate = false;
    }

我该怎么做呢。因为这不起作用。

在这里的其他事情上 - 当我运行 GUI 时,我需要单击 2 次同一个按钮来启动它。完成代码清理 + 重建。还是一样。

- -编辑 - -

至于代码,你去吧。

这是一个用于收集方法和事件的类。

public class DrivesEventArgs : EventArgs
{
    string MYDOC = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    const string backup_Drives = "....";
    const string backup_Letters = "...";
    public List<string> List1ToSave = new List<string>();
    public List<string> List2ToSave = new List<string>();

    public string SAVE_DRIVE_Letter
    {
        get
        {
            string name = Path.Combine(MYDOC, backup_Letters);
            return name;
        }
    }
    public string SAVE_DRIVE_Path
    {
        get
        {
            string name = Path.Combine(MYDOC, backup_Drives);
            return name;
        }
    }
}
public class DrivesBackup
{

    private const string path = "Network";
    private List<string> drives_to_save = new List<string>();
    private List<string> letters_for_drives = new List<string>();
    private RegistryKey reg1, reg2;
    public event EventHandler<DrivesEventArgs> SaveDrives;
    public void DrivesSave()
    {
        var data = new DrivesEventArgs();
        try
        {
            if (drives_to_save.Count == 0)
            {
                reg1 = Registry.CurrentUser.OpenSubKey(path);
                string[] mounted_drives = reg1.GetSubKeyNames();

                foreach (var drive in mounted_drives)
                {   //get all UNC Paths from mounted_drives

                    string[] getUNC = { path, drive };
                    string fullUNC = Path.Combine(getUNC);
                    reg2 = Registry.CurrentUser.OpenSubKey(fullUNC);
                    string UNCPath = reg2.GetValue("RemotePath").ToString();  //getting UNC PATH
                    Console.WriteLine(UNCPath);

                    data.List1ToSave.Add(drive.ToString());
                    data.List2ToSave.Add(UNCPath);
                    OnSaveDrives(data);
                }
            }
        }
        catch (Exception er)
        {

            throw er;
        }


        
    }

    protected virtual void OnSaveDrives(DrivesEventArgs eD)
    {
        SaveDrives?.Invoke(this, eD);
    }

现在这里是 MAINWINDOW WPF

 public partial class MainWindow : Window
{
    DrivesBackup backup = new DrivesBackup();

    public MainWindow()
    {
        InitializeComponent();
    }

    private void bbdrives_Click(object sender, RoutedEventArgs e)
    {  
        backup.DrivesSave();
        backup.SaveDrives += OnSavingDrives;
        Drive_text.Visibility = Visibility.Visible;
        drives_progres.Visibility = Visibility.Visible;
        drives_progres.IsIndeterminate = true;
    }

 private void OnSavingDrives(object sender, DrivesEventArgs e)
    {
       
        Directory.CreateDirectory(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), @"SEG-Backup"));
        File.WriteAllLines(e.SAVE_DRIVE_Path, e.List2ToSave);
        File.WriteAllLines(e.SAVE_DRIVE_Letter, e.List1ToSave);

        Drive_text.Visibility = Visibility.Collapsed;
        drives_progres.Visibility = Visibility.Collapsed;
        drives_progres.IsIndeterminate = false;
    }
}

现在我确实希望这会让一些事情更清楚。

标签: c#wpf

解决方案


推荐阅读