XAML 如何使一个弹出保存的内部所作的更改?

slhcrj9b  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(74)

我使用Community Toolkit中的弹出窗口,当用户按下按钮时,我会显示一个Popup页面。在该弹出窗口上,我有一个Picker。当用户做出选择并关闭弹出窗口时,他们的选择会被传递回来,但如果用户稍后想要更改选择或查看他们选择的内容并通过按下按钮再次调用弹出窗口,则会出现一个新的干净弹出窗口。问题是:这是可能的,如果是的-如何使它,以便在按下按钮的同一个弹出窗口的示例总是显示与所有的选择之前?
弹出页面:

public partial class PopUpCreation : Popup
{   
    public PopUpCreation(ILocalizationResourceManager LocalizationResourceManager, Character player)
    {
        InitializeComponent();
        
        //Some code

            Picker picker = new Picker();
            
            //Some Code       
                        
            picker.ItemsSource = scores;
            picker.SelectedIndexChanged += Picker_SelectedIndexChanged;
            Stack.Children.Add(picker);
    }

    private void Picker_SelectedIndexChanged(object? sender, EventArgs e)
    {
        //Some code
    }
}

字符串
调用popup:

private void ButtonAbilityScores_Clicked(object sender, EventArgs e)
{        
    var result = this.ShowPopupAsync(new PopUpCreation(_LocalizationResourceManager, Player));
}


我真的不知道该怎么做,谷歌也没有帮助我。
谢谢你,谢谢

xfb7svmp

xfb7svmp1#

简短的回答是:你不能。弹出窗口的目标是在需要的时候创建,一旦你不再需要它就处理掉。
解决方法不是保存弹出窗口本身,而是保存生成弹出窗口时所需的信息:

public partial class PopUpCreation : Popup
{   
    public PopUpCreation(ILocalizationResourceManager LocalizationResourceManager, Character player, int SelectedIndexToRestore = -1)
    {
        InitializeComponent();
        
        //Some code

            Picker picker = new Picker();
            
            //Some Code       
                        
            picker.ItemsSource = scores;

            // Index -1 is used as default value for when you don't have a SelectedIndex to give
            if (SelectedIndexToRestore != -1) picker.SelectedIndex = SelectedIndexToRestore;

            picker.SelectedIndexChanged += Picker_SelectedIndexChanged;
            Stack.Children.Add(picker);
    }
}

字符串
您只需保存SelectedIndexToRestore到ViewModel或AppData中的某个位置,以便在调用它时将其传递给popup构造函数。

iq3niunx

iq3niunx2#

我对此有两个想法:
1-你可以在你可以创建的模型上存储你的弹出窗口或页面控件,比如选择器,文本框,..

public class popupUpSetting
{
 public int PickerValue{get;set;}
}

字符串
然后您可以将其保存在数据库或其他存储中

2-你可以从弹出窗口定义一个静态对象,然后每次你想显示传递静态对象

static PopUpCreation popUpInstance;


然后当你想这样展示的时候:

this.ShowPopupAsync(popUpInstance)


这种方式是不合理的第一个想法是很常见的,如果你想坚持你的设置,有更好的性能

相关问题