1

我在 .net 4.5 中有一个 WPF 应用程序在这个应用程序中,我创建了一个名为“Client”的类。

在我的 App.xaml.cs 上,我声明并实例化了一个 Client 对象:

    public partial class App : Application
    {

        public static Client obj_myClient;

        private void Application_Startup_1(object sender, StartupEventArgs e)
        {

            obj_myClient = new Client();

        }
    }

启动后,我将所有客户端加载到 DataGrid 中,并且,当我进入客户端行(在 DataGrid 上)时,客户端属性将加载到 App.obj_myClient(带有绑定)中。

我可以轻松地修改我的客户在数据库中的保存。

我的问题:当我想创建一个新客户端时,我需要“刷新”我的 App.objMyClient 对象,所以我使用了:

App.obj_myClient = new Client();

这段代码编译正确,没有崩溃,但它似乎在我的绑定中生成了错误的数据并且总是奇怪的错误(比如非触发事件发生了变化等....)

我认为这与以下内容有关:

App.obj_myClient = new Client(); 

因为如果我删除这一行,代码会更好。

请问您在这种情况下有何建议?

非常感谢 :)

此致,

尼克修斯

4

2 回答 2

1

您可以执行以下操作来避免静态变量。但是很难说它是否能解决你的问题,因为我们不知道它在做什么。

public class App : Application
{
    public Client obj_myClient;
    private void Application_Startup_1(object sender, StartupEventArgs e)
    {
        obj_myClient = new Client();
    }
}

用法

private void SomeMethod()
{
    var someValue = ((App)Application.Current).obj_myClient.WhatEverMethod();
}
于 2013-04-12T12:37:24.123 回答
1

您不需要将客户端对象作为静态对象。将其转换为属性。

事件的非触发是,当您创建一个新的 Client 对象时,对旧对象的订阅会丢失,您必须重新创建它们。

于 2013-04-12T12:43:32.193 回答