从另一个窗口(类)调用方法问题

2024-03-18

在 WPF 应用程序主窗口的代码隐藏文件中,我有一个使用 LINQ to SQL 查询数据库并将结果写入 ObservableCollection 的方法:

    public void GetStateByDate(string shcode)
    {
        MydbDataContext contextSts = new MydbDataContext();
        _ShAvaQuCollection.Clear();

        var sts = from p in contextSts.SAties where p.ShID == shcode select p;

        foreach (var p in sts)
            _ShAvaQuCollection.Add(new ShAvaQu
            {
                ShCode = p.ShID,
                SiID = p.SiID,
                PrCat = p.PrCat
            });
    }

当我从同一代码隐藏文件(同一窗口)调用此方法时,一切正常。

如果我使用主窗口的实例从另一个窗口调用此方法,ObservableCollection 仍为空:

SWindow sw = new SWindow();
sw.GetStateByDate(stringpar);

这是什么原因呢?在这种情况下,方法是否会创建 ObservableCollection 的另一个实例?

(我可以在调试器中看到sw._ShAvaQuCollection包含值。是sw._ShAvaQuCollection与集合的实例不同_ShAvaQuCollection?如果是,如何解决?)

已编辑(已添加)

ObservableCollection 是这样声明的:

    ObservableCollection<ShAvaQu> _ShAvaQuCollection =
            new ObservableCollection<ShAvaQu>();

    public ObservableCollection<ShAvaQu> ShAvaQuCollection
    { get { return _ShAvaQuCollection; } }

    public class ShAvaQu
    {
        public string ShCode { get; set; }
        public string SiID { get; set; }
        public int PrCat { get; set; }
    }

我从一个窗口调用该方法,其中另一个集合ShQuCollection通过ListView显示。在 SelectionChanged 事件处理程序中,我采用此数据库查询的参数:

private void ShSelList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {           
        SWindow sw = new SWindow();         
        string str = sw.ShQuCollection[ShSelList.SelectedIndex].ShCode;
        sw.GetStateByDate(str);
        Close();
    }
}

1)最重要的是,您不应该从窗口/表单调用数据库逻辑。您应该将其抽象到另一个类中。然后你可以让你的方法返回一个可观察的集合。

但是,在您的情况下,我假设您正在尝试使用辅助表单来重新加载/加载集合,并且您希望在主表单上使用它。问题是您正在创建表单的新实例,因此您的集合正在填充,但不是在主表单上,而是在副本上。

您可以尝试通过多种方法来解决这个问题。

1) 使方法静态并且可观察集合静态,以便它更新单个实例。

2) 将主要表单的实例句柄传递到辅助表单中,以便您重新使用已有的实例。这样做会更可取,这样您就不会到处创建新实例。

在第二种形式的构造函数中,您可以传入主窗口的实例,这样您就可以直接使用它。这应该可以解决你的问题。

更新:这是一些代码示例。基本上有很多方法可以传递引用。

您可以使用构造函数这样做:

// This is the constructor for your second window
private Window _parentHandle;

public SecondWindow(Window obj)
{
    this._parentHandle = obj;
}

然后从具有方法的主表单中,您可以像这样打开该窗口。

SecondWindow w = new SecondWindow(this);
w.Show();

现在,您的第二个窗口具有第一个窗口的直接句柄,因此您可以对该变量调用方法,它将更新。

另一种方法是在第二个窗口上也有一个公共 Setter 方法。

public Window ParentContext
{
   get { return this._parentHandle; }
   set { this._parentHandle = value; }
}

然后您可以像这样创建表单实例:

SecondWindow w = new SecondWindow();  // so just like normal
w.ParentContext = this; // set the instance to the calling form
w.Show();

这是基础知识。这种类型的场景几乎适用于任何需要传递引用的场景。

希望有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从另一个窗口(类)调用方法问题 的相关文章

  • 用于在 n LSBits 之后清除 m 位的掩码

    我在一次采访中被问到这个问题 要清除 16 位整数的 n 位之后的 m 位 假设数字是 10010010010100101 清除 LSBit 中 5 位后的三位 之前 1001100111011001 之后 1001100100011001
  • 路径不是有效的虚拟路径

    下面的方法采用指向 xml 文件的路径 tree LoadContentFile path 我从本地文件系统传递完整路径 或使用Server MapPath 但每次我总是收到此错误 Path 不是有效的虚拟路径 编辑 我正在使用Teleri
  • InfluxDB 2 介绍性示例不会向存储桶中插入任何数据

    安装 InfluxDB 2 后 它会显示一个网站 其中包含各种语言的示例代码 创建存储桶和具有 RW 权限的令牌并选择它们后 可以使用带有适当魔术字符串的代码片段 把它们放在一起我有这个 using System using System
  • 运行WPF应用程序时出错

    该应用程序在制作它的计算机上运行良好 但是当我将其复制到另一台相同的操作系统时 它崩溃并显示以下错误 Problem signature Problem Event Name CLR20r3 Problem Signature 01 vpn
  • 如何使用 ioread64() 和 iowrite64() 访问 IO 内存?

    背景 我目前正在编写一个设备驱动程序教育设备 https github com qemu qemu blob master hw misc edu c在 qemu RISC V 中 由此question https stackoverflo
  • 保序最小完美哈希函数

    我想用 C 为字典中的单词实现 OPMPH 函数 我该怎么做 Thanks 你看过这些论文吗 http dx doi org 10 1016 0020 0190 92 90220 P http dx doi org 10 1016 0020
  • libc++ 中短字符串优化的机制是什么?

    这个答案 https stackoverflow com a 10319672 1805388给出了短字符串优化 SSO 的高级概述 但是 我想更详细地了解它在实践中是如何工作的 特别是在 libc 实现中 字符串必须有多短才能符合 SSO
  • Scala 泛型函数值(匿名函数)- 缺少参数类型(错误)

    我是 Scala 新手 Scala 代码运行器版本 2 7 7 final 我真的不明白为什么当我们使用高阶函数时它要求调用者提供参数类型 在下面的示例中 我有一个独立的对象 Util 具有一个功能 但在Main块中 调用者必须将参数类型传
  • 如何访问UPnP设备的服务?

    设备 贝尔金 WeMo Switch开发环境 Windows 7 上的 MS VC 2010 我正在尝试使用 Windows 中的 C 枚举 UPnP 设备的服务 我有IUPnPDevice指针并可以访问多个属性 我有IUPnPServic
  • 按文件创建日期排序(并枚举)目录列表?

    所以我有这个例程 public static IEnumerable
  • 如何重写 C++ 标准库类函数?

    如何重写 C 标准库类函数 在我的应用程序中 我使用ofstream代码中许多不同位置的对象 现在我想在Linux Ubuntu中以不同的权限模式打开文件 但open的函数ofstream没有参数来指定它创建的文件的权限模式 现在我想覆盖o
  • 如何在 C++ 中创建动态整数数组?

    如何使用 C 创建动态整数数组new关键词 int main int size std cin gt gt size int array new int size delete array return 0 别忘了delete你分配的每个数
  • 强名称验证失败

    两台机器 均带有 NET 3 5 和 VS 2008 VC SP1 可再发行组件 单个 exe 使用两个签名的 DLL 一个在 C CLI 中 一个在 C 中 该exe在一台机器上加载并运行良好 另一方面 我在 C 可执行文件上收到 强名称
  • 类型或命名空间名称“X”在命名空间“Y”中不存在 - 在 VS 生成的代码中

    这是我遇到过的最奇怪的错误 这个 MVC Web 项目直到今天都运行良好 几周以来还没有任何人对其进行处理 尽管没有任何改变 但现在简单地运行它会导致 命名空间 CMSModels ViewModels 中不存在类型或命名空间名称 Colo
  • C# 使用正则表达式获取内容内的 html 标签和下一个元素

    这是我的html div class 50f3 Followed by a href https www facebook com zurabj followers 7 583 people a div div class 50f3 Fri
  • 从 Silverlight 中的文件夹加载资源“.resx”

    我有一个多语言应用程序 客户想要按照他的意愿编辑 Resources resx 文件 我创建了 silverlight 项目并添加了一些文件 资源 resx 资源 en US resx1 资源 uk UA resx2 他们都有构建操作 嵌入
  • 如何在其他项目中添加NLog类库项目

    我已经用 C 创建了一个控制台项目 在该项目中我使用 NLog 进行日志记录 当我运行该项目时 它成功登录到多个目标 例如控制台 文件 EventLog 以及 Sentinal 但是 当我将此项目作为类库并尝试添加对另一个项目的引用时 它不
  • 在 C# 中使用 Nsubstitute 模拟具有固定参数的可选参数的函数返回 null

    我一直在尝试模拟一个包含带有固定参数的可选参数的函数 但每次我得到一个空值 这是我在接口中定义的函数 我想模拟它 List GetEntitiesByIDs List
  • 处理多个自动重定向的正确方法是什么?

    我有一个网站 基本上允许客户构建一个包含可配置项目的购物车 用户将选择一个项目 系统会提示他们选择他们想要的第一个选项 然后他们将被发送到第二个步骤 在那里他们选择第二个选项 等等 步骤数和选项数是可变的 因为它们是由客户定义的 通常该项目
  • 显式移动构造函数

    尝试编译以下代码 struct Foo explicit Foo void explicit Foo Foo rhs Foo bar void return Foo 出现以下错误 调用 Foo 的隐式删除复制构造函数 嗯 很明显复制者被隐式

随机推荐

  • R 中 ntile 和 cut 以及 then quantile() 函数之间的区别

    我发现了关于这个主题的两个线程 用于计算 R 中的十分位数 但是 这两种方法 即dplyr ntile and quantile 产生不同的输出 实际上 dplyr ntile 无法输出正确的十分位数 方法 1 使用 ntile From
  • [[17.0.0,17.0.0]] 上的各个其他库正在请求 com.google.firebase:firebase-iid 库,但解析为 16.2.0

    我今天开始收到此错误 昨天一切正常 gradle 或 firebase 版本没有变化 com google firebase firebase iid 正在请求库 17 0 0 17 0 0 处的各种其他库 但解析为 16 2 0 禁用插件
  • 在运行 .NET 4 的 IIS 7 上找不到默认角色提供程序

    大家早上好 我正在尝试在我的 Web 应用程序中实现自定义成员身份和角色提供程序 这些应用程序是在 IIS 7 实例的默认网站下实现的 我的 Web 应用程序在 NET 4 应用程序池下运行 但是 设置相应的web config后 出现以下
  • 使用 C# 组合两个相对路径

    将相对路径附加到绝对路径 有很多欺骗 但我需要添加相对路径 e g Path1 Parent Child a txt Path2 Sibling file cs Result Parent Sibling file cs Tried Dir
  • Java:计算二项式系数

    我有以下程序计算两个整数的二项式系数 但我想更改程序 它只计算并保存解决方案所需的系数 问题是我现在真的不知道该怎么做 The Code https i stack imgur com 6TUDE jpg public static lon
  • jdk10中外部jar包放在哪里

    我一直在 JDK8 中将外部 jar 放入 jre lib ext 中 但是 当我将jdk更新到jdk10时 我在jdk目录中找不到jre子目录 所以我从Oracle下载了jre10 结果发现ext目录丢失了 我应该把这些外部jar放在哪里
  • C++ 和 C 中的命名空间

    并不是说我会ever在我的专业工作中编写如下代码 以下代码在c 和c中是合法的并且编译时没有警告 include
  • UITextField 仅在顶部或底部具有圆角半径

    我有一个UITextField已添加到视图中 我正在尝试更改它的默认外观 我想要的是改变圆角半径 但仅限于顶部 底部 我这样做是这样做的 UIBezierPath usernameMaskPathWithRadiusTop UIBezier
  • 在 LISP 中使用“ash”执行二分查找?

    所以 我现在正在阅读 Land of Lisp 事实证明 Lisp 与我见过的其他编程语言有很大不同 无论如何 本书提供了一些我们要输入到 CLISP REPL 中的代码 defparameter small 1 defparameter
  • 如何解决心跳时间超过“00:00:01”失败的问题?

    我有一个执行 HTTP POST 的 NetCore C 项目 该项目是在 Kubernetes 中设置的 我注意到以下日志 Heartbeat took longer than 00 00 01 at 02 22 2020 15 43 4
  • 无法运行我的程序

    尝试制作我的第一个程序 基本智力游戏 每次我尝试运行它时都没有显示任何内容 并且不知道出了什么问题 希望您能给我一些帮助或建议 顺便说一句 我在 Java 编程方面几乎是菜鸟 所以请轻松地评论 这是代码 import java util i
  • MySQL 索引 - 根据此表和查询,最佳实践是什么

    我有这张表 500 000 行 CREATE TABLE IF NOT EXISTS listings id int 10 unsigned NOT NULL AUTO INCREMENT type tinyint 1 NOT NULL D
  • 使用 MySQL C++ 连接器解决未定义的引用

    我正在尝试编译它 也在 mysql c 连接器文档中列出 http pastebin com HLv4zR0r http pastebin com HLv4zR0r 但我收到这些错误 http pastebin com 3t0UbeFy h
  • Keras 对隐藏层定义的澄清

    我正在遵循有关在 Keras 中构建简单深度神经网络的教程 提供的代码是 create model model Sequential model add Dense 12 input dim 8 activation relu model
  • “安全”DLL 注入

    抱歉 这不是一个很好的问题 我有一个程序 当从资源管理器打开文件时需要发出警报 即调用 ShellExecute A W 不幸的是 微软删除了允许您在 Vista 及更高版本中挂钩这些事件的 COM 接口 IShellExecuteHook
  • 将 numpy 数组保存为具有自定义颜色的单通道 png

    我有一个整数 numpy 数组 表示具有很少值 大约 2 5 的图像 我想将其保存为 png 文件 并为每个值提供自定义颜色 我正在尝试这样 import numpy as np from PIL import Image array np
  • 设置 body onload 而不使用 标签

    我正在尝试在身体加载后触发一个功能 我知道你可以从 body 标签中执行此操作 但如果可能的话 我更愿意从 JS 中执行此操作 例如 document getElementsByTagName body onload someFunc 这对
  • 就 Android 上的路径而言,多用户功能如何工作?

    背景 从 4 2 版本开始 Android 支持多用户 链接here http developer android com about versions android 4 2 html MultipleUsers and here htt
  • 矩阵 int mat[5][5] 与 int ** 相同吗? [复制]

    这个问题在这里已经有答案了 简单的一维数组被视为指针 但矩阵也是如此吗 然而 一个立方体int 5 5 5 也将被视为int 不 指向整数的指针与整数数组的数组不同 想想它们在记忆中会是什么样子 数组的数组 例如int a 2 2 a 0
  • 从另一个窗口(类)调用方法问题

    在 WPF 应用程序主窗口的代码隐藏文件中 我有一个使用 LINQ to SQL 查询数据库并将结果写入 ObservableCollection 的方法 public void GetStateByDate string shcode M