如何让Community Toolkit Popup保留用户选择并复用实例?
保留Community Toolkit Popup实例并复用选择状态的解决方案
问题根源
你当前的代码每次点击按钮都会创建一个全新的PopUpCreation实例,导致之前的Picker选择状态完全丢失。要保留选择状态,核心是复用同一个Popup实例,而非每次创建新对象。
解决方案步骤
1. 在父页面中声明Popup实例变量
在包含ButtonAbilityScores按钮的页面类中,添加一个私有成员变量来持久化Popup实例:
// 父页面类中的私有变量 private PopUpCreation _abilityScoresPopup;
2. 修改按钮点击事件逻辑
修改点击事件处理代码,仅在首次点击时创建Popup实例,后续点击直接复用已存在的实例:
private void ButtonAbilityScores_Clicked(object sender, EventArgs e) { // 仅当实例未创建时初始化 if (_abilityScoresPopup == null) { _abilityScoresPopup = new PopUpCreation(_LocalizationResourceManager, Player); } // 复用已有的Popup实例显示 _ = this.ShowPopupAsync(_abilityScoresPopup); }
3. 确保Popup内部状态保留
你的PopUpCreation构造函数中已经完成了Picker的创建和配置,这部分代码无需修改。因为Popup实例被复用,Picker的SelectedIndex等状态会自动保留,下次弹窗显示时会直接展示之前的选择结果。
额外注意事项
- 如果后续需要更新Popup依赖的
Player对象,可以在PopUpCreation中添加一个公共方法来刷新数据:
调用时只需在父页面执行:public void RefreshPlayerData(Character updatedPlayer) { // 这里添加更新Popup内控件或逻辑的代码 }_abilityScoresPopup.RefreshPlayerData(newPlayerInstance); - 避免在Popup关闭时手动销毁内部控件或调用
Dispose方法,否则会导致状态丢失。
内容的提问来源于stack exchange,提问作者ForumWarrior
相关产品推荐
相关产品推荐

