WPF本地多人炸弹人游戏自定义按键绑定值自动还原问题
WPF按键设置值还原问题排查
以下是可能导致TextBox失去焦点后值自动还原的常见原因及排查方向:
- ViewModel未实现INotifyPropertyChanged接口:WPF双向绑定依赖该接口感知属性变化。如果PlayerXControls相关属性修改时未触发
PropertyChanged事件,WPF会在控件失去焦点时重新读取ViewModel的初始值。必须确保ViewModel实现该接口,且属性setter中调用OnPropertyChanged方法。 - 绑定配置错误:检查TextBox的绑定是否明确设置
Mode=TwoWay(虽然TextBox的Text绑定默认双向,但手动修改后可能失效)。可临时将UpdateSourceTrigger设为PropertyChanged测试,若修改后实时生效,说明原触发时机下源更新存在问题。 - Model与ViewModel的同步逻辑异常:确认Model的保存方法是否附带了从Model反向同步数据到ViewModel的逻辑,比如保存后自动将Model的初始值重新赋值给ViewModel属性,导致值被重置。
- ViewModel属性的getter逻辑错误:检查PlayerXControls属性的getter,若每次读取都直接从Model获取初始值(而非ViewModel自身的私有字段),会导致TextBox失去焦点时显示Model的原始值。比如错误写法:
public Key MoveUp => _model.Player1MoveUp;,正确应返回ViewModel维护的字段。 - 焦点相关的额外逻辑干扰:排查ControlSettingsPage是否存在LostFocus事件处理程序,或ViewModel中是否有焦点变化触发的命令,这些逻辑可能在控件失焦时重置了属性值。
- ViewModel实例重复创建:确认页面绑定的ViewModel实例是否唯一,若在页面加载、焦点变化时重新创建了ViewModel实例,新实例的初始值会覆盖修改后的设置。
内容的提问来源于stack exchange,提问作者Gergő Gyepes
相关产品推荐
相关产品推荐

