Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >通知字典中某些值已更改

通知字典中某些值已更改
EN

Stack Overflow用户
提问于 2013-01-30 05:31:17
回答 2查看 5.8K关注 0票数 5

目前,我正在编写实现INotifyPropertyChanged的自己的字典。见下文:

代码语言:javascript
代码运行次数:0
复制
public event PropertyChangedEventHandler PropertyChanged;

protected void OnPropertyChanged(string propertyName)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

new public Item this[TKey key]
{
    get { return base.Item[key]; }
    set(TValue value)
    {
        if (base.Item[key] != value)
        {
            base.Item[key] = value;
            OnPropertyChanged("XXX"); // what string should I use?
        }
    }
}

我的目标很简单:当字典中的某个值发生变化时,通知它已经改变了。所有具有相应键名绑定的WPF元素都应该更新自己。

现在我的问题是:为了通知,我应该使用什么字符串作为propertyName

我试过"[" + key.ToString() + "]""Item[" + key.ToString() + "]"和简单的key.ToString()。它们似乎都不起作用,因为WPF元素没有更新。

使用String.Empty ("")确实会更新WPF元素,但我不使用它,因为这将更新绑定相同字典的所有WPF元素,即使它们有不同的键。

这就是我的绑定在XAML中的样子:

代码语言:javascript
代码运行次数:0
复制
<TextBlock DataContext="{Binding Dictionary}" Text="{Binding [Index]}" />

当然,Index是我字典中密钥的名字。

有些人建议使用INotifyPropertyChanged,而不是使用INotifyCollectionChanged。我试过这个:

代码语言:javascript
代码运行次数:0
复制
Dim index As Integer = MyBase.Keys.ToList().IndexOf(key)
Dim changedItem As Object = MyBase.ToList().ElementAt(index)

RaiseEvent CollectionChanged(Me, New NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, changedItem, index))

,但这也不更新绑定的WPF元素.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-30 06:44:41

也许您需要考虑INotifyCollectionChanged接口,而不是INotifyPropertyChanged。如果是这样的话,请查看这个问题和它链接到的博客文章。

另外,请检查这个答案上一个类似于您的问题。它建议您使用Binding.IndexerName的值作为更改通知的属性名。

编辑:

如果您想避免使用INotifyCollectionChanged,可以尝试另一种方法。更改字典,使其值的类型成为实现INotifyPropertyChanged的代理对象。

代码语言:javascript
代码运行次数:0
复制
public class MyProxy<T> : INotifyPropertyChanged
{
    public T Value
    {
        // Getter and setter with change notification code here.
    }
}

然后,只将这种类型的实例插入字典一次。将更新字典中值的代码替换为检索代理的代码,然后更新其Value属性。

您需要更改XAML绑定到类似([Item]).Value的内容。

在回顾了您的其他一些评论之后,看起来这种方法可能对您有用。这和我最近不得不做的事情很相似。创建自定义KeyedCollection和相应的代理。向代理添加ItemName属性;它只能读取,不需要支持更改通知。在KeyedCollection属性上设置ItemName实现索引。很好的享受!如果您愿意的话,我会添加示例代码。

票数 7
EN

Stack Overflow用户

发布于 2013-01-30 06:03:41

代码语言:javascript
代码运行次数:0
复制
if (base.Item[key] != value)
{
     base.Item[key] = value;
     if (key == "notifykey") OnPropertyChanged("[Item]");
}

String.empty将通知所有属性,而不仅仅是项

按照op这个问题,所有绑定到字典的问题仍然更新。

所以我会做一个新的财产

假设您的值是字符串绑定到KeyedValue

代码语言:javascript
代码运行次数:0
复制
public String KeyedValue
{
    get { return base.Item[Index]; }
}

if (key == "Index") OnPropertyChanged("KeyedValue");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14605278

复制
相关文章
Kali远程桌面Windows时出现"连接被对端重置"错误
ERROR: rdp.c:140: rdp_recv(), unexpected stream overrun0000 03 00 00 1e 02 f0 80 68 00 01 03 eb 70 10 08 00 .......h....p... 0010 02 03 83 89 43 9f f8 48 33 7e 04 00 16 00 ....C..H3~....
菜菜有点菜
2022/03/16
2.9K0
Kali远程桌面Windows时出现"连接被对端重置"错误
如何重置MySQL或MariaDB Root密码
忘记密码发生在我们大多数人身上。如果您忘记或丢失了MySQL或MariaDB数据库的root密码,如果您有权访问服务器和启用了sudo用户帐户,您仍然可以获得访问权限并重置密码。
黑色技术
2018/10/19
5.5K1
记录神奇的DedeCMS管理员登录密码错误及重置问题
老蒋刚才准备将一个客户的企业网站(采用DedeCMS系统搭建)上线的。因为我们是采用本地主题前端模式,内核的程序一般还是要安装最新的。于是我在真实服务器环境中常规的安装织梦程序的时候没有问题,但是在设置账户密码之后,居然无法登录。
老蒋
2021/12/27
1.9K0
WordPress 如何重置密码
在本文中,我们将讨论两种在您忘记 WordPress 网站密码时让您重新登录 WordPress 网站的方法。
海拥
2022/10/06
3K0
WordPress 如何重置密码
Xmarks不能同步或连接被重置解决方案(修改hosts)
此操作只用来解决firefox插件Xmarks不能同步或连接被重置的问题,通过以下方法可以解决无法访问Xmarks问题。
zhaoJian.Net
2023/02/24
7120
linux mysql重置密码_linux系统重置
大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。 Jetbrains全系列IDE稳定放心使用
全栈程序员站长
2022/11/04
6.2K0
Ubuntu Linux下解决Xmarks不能同步或连接被重置方法
#xmarks 64.147.188.86 www.xmarks.com 64.147.188.92 api.xmarks.com 64.147.188.89 login.xmarks.com 64.147.188.87 sync.xmarks.com 64.147.188.86 static.xmarks.com 64.147.188.86 download.xmarks.com 64.147.188.86 my.xmarks.com 保存后,打开xmarks设置菜单,选择“高级”,加密那个下拉框里面选择“全部加密”,就可以同步了。
zhaoJian.Net
2023/02/24
1.2K0
如何在MySQL 8.0中重置Root密码
在遗忘或丢失MySQL root密码的不幸事件中,您肯定需要一种方法来恢复或重置MySQL 8.0版本中的root密码。
用户2323866
2021/06/18
13.4K0
Nginx怎样隐藏上游错误
当上游出错时,作为负载均衡的Nginx可以实时更换Server,在客户端无感知的情况下重新转发HTTP请求。这一功能在Nginx指令中称为next upstream,本文将详细介绍其用法及实现原理。
陶辉
2023/10/18
4690
Nginx怎样隐藏上游错误
当 kube-proxy 遇到连接重置
最近我一直被一个间歇性连接重置的 bug 所困扰,经过一段时间的调试之后,发现该 bug 是由几个不同的网络子系统联合导致的。通过这几天的深入挖掘和调试,我对 Kubernetes 的网络机制更加熟悉了,对此也有了一些经验总结,分享给社区。
米开朗基杨
2019/08/29
2.4K0
当 kube-proxy 遇到连接重置
如何重置MySQL root密码
在这篇文章中,我们将向您展示如何重置MySQL root密码以备忘记。 以下步骤适用于任何现代Linux发行版。
星哥玩云
2022/08/16
3.8K0
如何重置MySQL root密码
如何在MySQL 8中重置root密码
MySQL中的用户密码存储在用户表中,密码重置实际上是改变该表中记录的值。 要在忘记密码的情况下更改密码,我们的想法是绕过MySQL的身份验证进入系统并使用SQL命令更新记录密码值。
星哥玩云
2022/08/17
1.3K0
【说站】php数组中如何重置索引
1、array_values 函数并不止重置数字索引还会将字符串键名也同样删除并重置。
很酷的站长
2022/11/23
1.6K0
【说站】php数组中如何重置索引
如何在Ubuntu 18.04上重置MySQL或MariaDB Root密码
忘记密码发生在我们最好的人身上。如果您忘记或丢失了MySQL或MariaDB数据库的root密码,如果您有权访问服务器和具有sudo权限的用户帐户,您仍然可以获得访问权限并重置密码。
你在哪里
2018/10/30
3.5K0
重置密码
当用户不小心忘记了密码时,网站需要提供让用户找回账户密码的功能。在示例项目中,我们将发送一封含有重置用户密码链接的邮件到用户注册时的邮箱,用户点击收到的链接就可以重置他的密码,下面是具体做法。 发送邮件设置 Django 内置了非常方便的发送邮件的功能,不过需要在 settings.py 中做一些简单配置。生产环境下通常需要使用真实的邮件发送服务器,配置步骤会比较多一点。不过 Django 为开发环境下发送邮件提供了一些方便的 Backends 来模拟真实邮件的发送,例如直接发送邮件到终端()。在 sett
追梦人物
2018/04/17
4.9K0
重置密码
点击加载更多

相似问题

如何诊断/修复特使代理“上游连接错误或头前断开/重置。重置原因:连接失败”

12

Istio Ingress使用ACM:上游连接错误或头前断开/重置。重置原因:连接终止

11

Google运行上的GRPC :上游连接错误或头前断开/重置。重置原因:远程重置

16

特使:“上游连接错误或头部前断开/重置,重置原因:连接失败”

1419

Istio 1.3服务之间随机的“上游连接错误或头前断开/重置”

18
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文