如何在 UWP 应用程序 C# 中将值从 ContentDialog 传递到页面?
How to pass value from ContentDialog to Page in UWP app C#?
我想实现一个简单的 ContentDialog
,它有一个采用用户名的 TextBox
。如何将该值传递给 UWP 中的页面??
就您的代码而言,ContentDialog 只是一个 class。 class 可以有属性。
因此您可以在显示对话框之前设置这些属性。并在对话框关闭后读取它们。
因此,您需要向从该文本框填充的 ContentDialog 添加一个 属性 - 如果您正确设置了数据绑定,则可以“自动”执行此操作。
编辑
所以而不是像
if (await new MyDialog().ShowAsync() == DialogResult.Primary) ...
做类似的事情
// first create an instance (this doesn't show anything yet)
var myDialog = new MyDialog();
// optionally set some properties
myDialog.Username = "some default value";
// now show that dialog
var res = await myDialog.ShowAsync();
// and when it is closed again ...
if (res == DialogResult.Primary)
{
// read the properties of your dialog instance
var theUsername = myDialog.Username;
// and do something with 'theUsername' ...
}
并在该对话框的 XAML 中,将用户名 属性 绑定到文本框的文本(这是确保 属性 的值为使用文本框的最新状态更新)。
How to pass value from ContentDialog to Page in UWP app C#?
正如 Hans Kesting 所说,您可以设置对话框的属性并在页面中使用对话框实例加载它。我将提供一种绑定方式来将值从 ContentDialog 传递到 Page。
public sealed partial class LoginDialog : ContentDialog ,INotifyPropertyChanged
{
public LoginDialog()
{
this.InitializeComponent();
}
private string _username;
private string _password;
public string UserNameValue { get { return _username; } set { _username = value; OnPropertyChanged(); } }
public string PasswordValue { get { return _password; } set { _password = value; OnPropertyChanged(); } }
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string name = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
private void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
{
}
private void ContentDialog_SecondaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
{
}
}
Xaml代码
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBox
x:Name="UserName"
Grid.Row="0"
Margin="0,0,0,12"
Text="{x:Bind UserNameValue, Mode=TwoWay}" />
<TextBox
x:Name="Password"
Grid.Row="1"
Text="{x:Bind PasswordValue, Mode=TwoWay}" />
</Grid>
用法
var dialog = new LoginDialog();
var res = await dialog.ShowAsync();
if (res == ContentDialogResult.Primary)
{
var password = dialog.PasswordValue;
var userName = dialog.UserNameValue;
}
我想实现一个简单的 ContentDialog
,它有一个采用用户名的 TextBox
。如何将该值传递给 UWP 中的页面??
就您的代码而言,ContentDialog 只是一个 class。 class 可以有属性。
因此您可以在显示对话框之前设置这些属性。并在对话框关闭后读取它们。
因此,您需要向从该文本框填充的 ContentDialog 添加一个 属性 - 如果您正确设置了数据绑定,则可以“自动”执行此操作。
编辑
所以而不是像
if (await new MyDialog().ShowAsync() == DialogResult.Primary) ...
做类似的事情
// first create an instance (this doesn't show anything yet)
var myDialog = new MyDialog();
// optionally set some properties
myDialog.Username = "some default value";
// now show that dialog
var res = await myDialog.ShowAsync();
// and when it is closed again ...
if (res == DialogResult.Primary)
{
// read the properties of your dialog instance
var theUsername = myDialog.Username;
// and do something with 'theUsername' ...
}
并在该对话框的 XAML 中,将用户名 属性 绑定到文本框的文本(这是确保 属性 的值为使用文本框的最新状态更新)。
How to pass value from ContentDialog to Page in UWP app C#?
正如 Hans Kesting 所说,您可以设置对话框的属性并在页面中使用对话框实例加载它。我将提供一种绑定方式来将值从 ContentDialog 传递到 Page。
public sealed partial class LoginDialog : ContentDialog ,INotifyPropertyChanged
{
public LoginDialog()
{
this.InitializeComponent();
}
private string _username;
private string _password;
public string UserNameValue { get { return _username; } set { _username = value; OnPropertyChanged(); } }
public string PasswordValue { get { return _password; } set { _password = value; OnPropertyChanged(); } }
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string name = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
private void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
{
}
private void ContentDialog_SecondaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
{
}
}
Xaml代码
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBox
x:Name="UserName"
Grid.Row="0"
Margin="0,0,0,12"
Text="{x:Bind UserNameValue, Mode=TwoWay}" />
<TextBox
x:Name="Password"
Grid.Row="1"
Text="{x:Bind PasswordValue, Mode=TwoWay}" />
</Grid>
用法
var dialog = new LoginDialog();
var res = await dialog.ShowAsync();
if (res == ContentDialogResult.Primary)
{
var password = dialog.PasswordValue;
var userName = dialog.UserNameValue;
}