当一个绑定属性得到一个输入?



目前我正在学习使用模板工作室的mvvm构建windows应用程序。我添加了一个SettingsPage,它包含一些元素,如:

<StackPanel x:Name="ContentArea">
<CommandBar Background="Transparent" OverflowButtonVisibility="Collapsed">
<AppBarButton Click="BtnSave_Click" Icon="Save" />          
</CommandBar>
<Pivot>
<PivotItem x:Uid="Settings_Personal">
<StackPanel Margin="{StaticResource XSmallTopMargin}">
<TextBlock x:Uid="Settings_Personal_Firstname" />
<TextBox x:Uid="Settings_Personal_FirstnameBox" Text="{x:Bind ViewModel.Firstname, Mode=TwoWay}" />                        
</StackPanel>
</PivotItem>
<Pivot>
</StackPanel>

我SettingsPage.xaml.cs:

public sealed partial class SettingsPage : Page
{
public SettingsViewModel ViewModel { get; }
public SettingsPage()
{
ViewModel = App.GetService<SettingsViewModel>();
InitializeComponent();
}
public void BtnSave_Click(object sender, RoutedEventArgs routedEventArgs)
{
ViewModel.SetSetting();
}
}

和我的Viewmodel:

public class SettingsViewModel : ObservableRecipient
{
private string _firstname;
public string Firstname
{
get => _firstname;
set => SetProperty(ref _firstname, value);
}
public SettingsViewModel(ILocalSettingsService localSettingsService)
{
_localSettingsService = localSettingsService;
}
public async Task SetSetting()
{
string test = Firstname;  // < My Breakpoint
await _localSettingsService.SaveSettingAsync("Firstname", Firstname);
}

}

在调试时,我用我的名字填充框,并为SetSettings任务设置一个断点。点击"保存"后按钮我可以看到,Firstname是空的。我是否需要添加一些更多的代码从框中获取信息?

由于{x:Bind}的默认模式为OneTime,因此您应该将绑定的Mode设置为TwoWay,以便您的源属性按预期设置:

Text="{x:Bind ViewModel.Firstname, Mode=TwoWay}"

最新更新