gpt4 book ai didi

c# - 当用户单击 CommandBar 上的 AppBarButton 时,最后一个具有焦点的文本框中的数据不会更新(UWP)

转载 作者:太空宇宙 更新时间:2023-11-03 19:43:43 24 4
gpt4 key购买 nike

我有一个简单的数据页面,用户在其中填写 2 个字段(名字和姓氏)并单击保存 AppBarButtonCommandBar 上.

这两个字段都使用 x:BindMode=TwoWay加载/更新值。

如果用户填写名字文本框,然后填写姓氏文本框并点击 CommandBar 上的 Save AppBarButton,当焦点仍然在姓氏文本框上时,只有名字被更新。

但是,我还创建了一个常规 Button在页面上,如果用户做同样的事情并改为使用此按钮,则两个字段都会按预期更新。

如何让 CommandBar 上的 AppBarButton 以与常规按钮相同的方式工作并更新所有数据而无需在后面添加大量代码?

这是我的简单类定义:

public class UserData
{
public string FirstName { get; set; }
public string LastName { get; set; }
}

这是 XAML 页面:

<Page
x:Class="mySampleApp.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
x:Name="MyPage"
mc:Ignorable="d">

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>

<CommandBar Grid.Row="0" DefaultLabelPosition="Right" >
<!-- Save button on a command bar-->
<AppBarButton Icon="Save" Label="Save" LabelPosition="Default" Click="saveStuff_Click" />
</CommandBar>

<!-- Sample Data to save-->
<TextBox x:Name="txtFirstName" Grid.Row="1" Header="Enter Your First Name" Text="{x:Bind currentUserData.FirstName, Mode=TwoWay}" PlaceholderText="First Name"/>
<TextBox x:Name="txtLastName" Grid.Row="2" Header="Enter Your Last Name" Text="{x:Bind currentUserData.LastName, Mode=TwoWay}" PlaceholderText="Last Name"/>

<!-- Save button using a regular button that calls the same function-->
<Button x:Name="saveStuff" Grid.Row="3" Content="Save" Click="saveStuff_Click" />

</Grid>
</Page>

下面是代码:

using Newtonsoft.Json;
using System;
using Windows.Storage;
using Windows.UI.Popups;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409

namespace mySampleApp
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page
{
//variables to use in XAML x:Bind
private UserData currentUserData = new UserData();

public MainPage()
{
this.InitializeComponent();
}

private async void saveStuff_Click(object sender, RoutedEventArgs e)
{
var file = await ApplicationData.Current.LocalFolder.CreateFileAsync("sampledata.json", CreationCollisionOption.ReplaceExisting);
await FileIO.WriteTextAsync(file, JsonConvert.SerializeObject(currentUserData, Formatting.Indented));
var dialog = new MessageDialog("Data saved to: " + file.Path.ToString() + Environment.NewLine + "Data Saved: FirstName: " + currentUserData.FirstName + "; LastName: " + currentUserData.LastName);
await dialog.ShowAsync();
}
}
}

最佳答案

我能够通过保留所有文本框绑定(bind)(使用 x:Bind)并仅更新 CommandBar 上的 AppBarButton 来解决此问题> 使用 AllowFocusOnInteraction="True"

现在看起来像这样,一切都按预期工作:

<AppBarButton AllowFocusOnInteraction="True" Icon="Save" Label="Save" LabelPosition="Default" Click="saveStuff_Click" />

关于c# - 当用户单击 CommandBar 上的 AppBarButton 时,最后一个具有焦点的文本框中的数据不会更新(UWP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49220905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com