如何在C# WPF应用的不同.cs类中调用已有方法
在WPF中从其他类调用MainWindow的LoadData方法
下面提供几种可行的实现方式,根据你的项目场景选择:
方法1:获取当前活跃的MainWindow实例
因为LoadData是MainWindow的实例方法,且依赖当前显示窗口的Datagrid控件,你需要获取应用中已打开的MainWindow实例,而非新建一个:
// 在目标类中添加以下代码 using System.Linq; using System.Windows; namespace Demo__Project { public class AnotherClass { public void TriggerLoadData() { // 从应用已打开窗口中找到MainWindow实例 var mainWindow = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault(); // 调用LoadData,避免空引用 mainWindow?.LoadData(); } } }
注意:这种方式仅适用于MainWindow已经处于打开状态的场景。
方法2:分离数据逻辑与UI操作(推荐)
当前LoadData方法混合了数据查询和UI更新逻辑,耦合度较高。建议将数据获取逻辑抽离到独立的服务类中,降低耦合:
步骤1:创建数据服务类
namespace Demo__Project { public static class DataService { // 提取连接字符串为常量 private const string ConnectionString = @"Data Source=DESKTOP-EKH75FM;Initial Catalog=DCS;Integrated Security=True"; // 封装数据查询逻辑 public static DataTable GetUserData() { string query = "SELECT * FROM DemoDatabase.dbo.UserData"; DataTable dt = new DataTable(); // 使用using自动释放数据库连接,避免泄漏 using (SqlConnection sqlcon = new SqlConnection(ConnectionString)) { SqlCommand sqlcom = new SqlCommand(query, sqlcon); sqlcon.Open(); SqlDataReader sdr = sqlcom.ExecuteReader(); dt.Load(sdr); } return dt; } } }
步骤2:修改MainWindow的LoadData方法
public void LoadData() { // 调用服务类获取数据 DataTable dt = DataService.GetUserData(); // 更新UI Datagrid.ItemsSource = dt.DefaultView; }
步骤3:在其他类中触发更新
你仍然可以通过方法1的方式获取MainWindow实例调用LoadData,也可以基于这个服务类扩展其他逻辑,后续维护会更方便。
方法3:通过构造函数传递MainWindow实例
如果你的目标类是在MainWindow中初始化的,可以直接将MainWindow实例通过构造函数传入:
// 目标类代码 namespace Demo__Project { public class AnotherClass { private readonly MainWindow _mainWindow; // 通过构造函数接收MainWindow实例 public AnotherClass(MainWindow mainWindow) { _mainWindow = mainWindow; } public void RefreshData() { _mainWindow.LoadData(); } } }
在MainWindow中初始化该类时传入自身:
public MainWindow() { InitializeComponent(); LoadData(); // 初始化AnotherClass并传入当前MainWindow实例 AnotherClass anotherClass = new AnotherClass(this); }
额外提醒
你的原始代码中SqlConnection是类字段,多次调用LoadData可能导致连接泄漏。建议使用using语句包裹数据库连接(如方法2中所示),确保连接被正确释放。
内容的提问来源于stack exchange,提问作者Hasan Khan
相关产品推荐
相关产品推荐

