LorisYounger / VPet

虚拟桌宠模拟器 一个开源的桌宠软件, 可以内置到任何WPF应用程序
Apache License 2.0
4.79k stars 476 forks source link

关于买买买食物之后有效度显示的问题 #186

Closed YukkuriC closed 1 year ago

YukkuriC commented 1 year ago
  1. 没有即时刷新,需手动触发列表刷新(翻页/切分类等) img1 这边能查到有触发food的状态更改事件 img2 但是项目中妹有响应这个事件的地方
  2. 实际生效有效度和显示有效度有差别 https://github.com/LorisYounger/VPet/blob/ad5d40e57b2876950b5869eabe0a3f17647304f8/VPet-Simulator.Windows.Interface/Mod/Food.cs#L197-L199 https://github.com/LorisYounger/VPet/blob/ad5d40e57b2876950b5869eabe0a3f17647304f8/VPet-Simulator.Windows/MainWindow.cs#L430
LorisYounger commented 1 year ago

如果你搞懂了,那就PR吧

YukkuriC commented 1 year ago

搞不懂(悲 第一个俺还没找到渲染食物元素的xaml在哪,以及需要考量一些关于释放、重复更新、etc.乱七八糟的事情 第二个得staff来拍板是哪边向哪边同步

Mochengvia commented 1 year ago

@YukkuriC 我看到了这句代码

item.NotifyOfPropertyChange("Eattime");

但是Food类里面并没有Eattime这个属性,没懂是要做什么

Mochengvia commented 1 year ago

另外,我看Food这个类里面的属性似乎都没实现NotifyPropertyChange,所以不会自动更新前端 要手动更新的话这样调用:

item.NotifyOfPropertyChange(() => nameof(Food.Desc));
或者
item.NotifyOfPropertyChange("Desc");

只能调用里面有的属性

LorisYounger commented 1 year ago

@YukkuriC 我看到了这句代码

item.NotifyOfPropertyChange("Eattime");

但是Food类里面并没有Eattime这个属性,没懂是要做什么

这个Eattime是外置的参数, 指的是喜好度/有效度, 使用在

https://github.com/LorisYounger/VPet/blob/ad5d40e57b2876950b5869eabe0a3f17647304f8/VPet-Simulator.Windows/WinDesign/winBetterBuy.xaml.cs#L50-L79

要更新的是 public string Description 内容,

https://github.com/LorisYounger/VPet/blob/ad5d40e57b2876950b5869eabe0a3f17647304f8/VPet-Simulator.Windows.Interface/Mod/Food.cs#L115-L138

LorisYounger commented 1 year ago

另外,我看Food这个类里面的属性似乎都没实现NotifyPropertyChange,所以不会自动更新前端 要手动更新的话这样调用:

item.NotifyOfPropertyChange(() => nameof(Food.Desc));
或者
item.NotifyOfPropertyChange("Desc");

只能调用里面有的属性

item.NotifyOfPropertyChange(() => nameof(Food.Desc)); 修好了 用item.NotifyOfPropertyChange("Desc");item.NotifyOfPropertyChange(nameof(Food.Desc));这两个都不行

WPF真神奇

Mochengvia commented 1 year ago

按照这种写法的话,数值更新后调用一下item.NotifyOfPropertyChange("Description");就可以了

YukkuriC commented 1 year ago

WPF真神奇