【问题标题】:C# WPF passing value between windows2 to windows1C# WPF 在 windows 之间传递值到 windows 1
【发布时间】:2017-05-16 23:48:28
【问题描述】:

首先,我是面向对象编程的初学者,目前正在完成我的最后一个 c# 项目。

简要说明,我已经为控制台应用程序创建了一个库类(dll)。这是我的第一个项目,然后对于这个项目,我必须将 dll 重用于 WPF 应用程序。我为 WPF 修改了我的代码。

我有一个用于登录的 MainWindows,主程序正在运行并调用 dll 的 windows1(集合基类,特定名称,如艺术家、策展人和艺术)。

我的问题是我必须使用 windows2(学习目的)来销售艺术品。我调用接受 2 个参数的 dll 类方法,例如(字符串 IDArt,双倍 SellPrice)。 我犯的错误是在 windows2 中重新创建了一个新的画廊实例。

我知道我必须以某种方式将我的(this) 实例发送到 windows2,然后检索对 windows1 的更改。

我想知道我应该如何处理这个问题。请注意,我从我学到的东西中理解了 c#,但我离真正了解和掌握它还很远。提前致谢!

【问题讨论】:

    标签: c# wpf dll


    【解决方案1】:

    由于 C# 是面向对象的,正确的方法是在比窗口本身更低的抽象层中创建 Collection 类的实例(因为您计划在多个窗口中重用同一个集合)——例如,在全局App 上下文中静态地——然后使用数据绑定在窗口之间同步集合。 (要使其按预期实时工作,您的 Collection 类还需要实现 IObservableINotifyPropertyChanged 以通知窗口的上下文需要用新元素刷新它。)

    【讨论】:

    • 据我了解,我应该为我的收藏创​​建一个单独的抽象页面并将其发送到所需的表单,例如 windows1 和 windows2?我也了解接口方法,但我没有太多机会练习委托/事件。
    • 据我所知,已经有 is 一个全局上下文,位于文件 App.xaml.cs 中(它被称为只要你使用 Visual Studio)。
    【解决方案2】:

    有很多方法可以做到这一点,我告诉你其中的一些..

    如果你想从其他地方访问 MainWindow 字段或属性,你可以这样做:

    在 Window2 中:

    //Calling MainWindow from Window2
    var form = App.Current.MainWindow as ManinWindow;
    form.textBox1.Text = "My Art";
    MessageBox.Show(form.textBox1.Text);
    

    或者您可以像这样将 Window1 的参数传递给 Window2:

    //Window 1
    private void btnShowWindow2_Click(object sender, RoutedEventArgs e)
    {
        var form = new Window2("My Art", 100);
        form.Show();
    }
    
    //Window 2 Constructor
    public Window2(string ArtName, int Price)
    {
         MessageBox.Show("ArtName: " + ArtName + "\nPrice: " Price.ToString() + " dollars");
    }
    

    //Window1
    private void btnShowWindow2_Click(object sender, RoutedEventArgs e)
    {
        var form = new Window2()
        {
            Price = 200,
            ArtName = "My Art"
        };
        form.Show();
    }
    
    //Window2
    
    public string ArtName {get; set;}
    public int Price {get; set;}
    
    private void Window2_Loaded(object sender, RoutedEventArgs e)
    {
         MessageBox.Show("ArtName: " + ArtName + "\nPrice: " Price.ToString() + " dollars");
    }
    

    【讨论】:

    • 非常感谢,我花了很长时间试图做到这一点,你的作品(我使用你展示的第一段代码)
    【解决方案3】:

    可能最简单的方法是使用应用程序的设置,这也是我最喜欢的方法之一,转到“Project\WpfApp1 属性”并转到“设置”选项卡,在那里你可以创建你的设置,创建 1设置名称为“IDArt”并将其设置为字符串类型,另一个设置名称为“SellPrice”并将其设置为双精度类型。 现在要访问这些设置,您只需使用以下代码:

    WpfApp1.Properties.Settings.Default.IdArt;,

    WpfApp1.Properties.Settings.Default.SellPrice;

    【讨论】:

    • 谢谢大家,感谢我能做的所有搜索和我得到的所有帮助。我终于通过将我的集合实例传递给 windows2 构造函数解决了我的小问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 2015-07-15
    相关资源
    最近更新 更多