如何在UserControl顶部加载的窗口中访问一个UserControl的数据代码?

时间:2016-03-16 20:18:24

标签: c# wpf xaml user-controls code-behind

我有一个带有UserControl的WPF应用程序,我的大部分应用程序都存在于其中。在这个UserControl中,我有几个不同的控件来保存用户信息。保存数据时,我创建一个窗口,弹出"弹出"通过UserControl确认保存。

在这个窗口中,我需要将UserControl中的一些数据显示回用户并保存到数据库。

我在Window中创建了UserControl的一个对象,以便访问控件:

    UserControl Ctrl = new UserControl();

但是这个UserControl不再保留我需要的值。此外,UserControl的构造函数接受可选参数。我发现在XAML中创建一个引用以访问控件会产生错误"类型" UserControlName"不包括任何可访问的构造函数。"

我正在对应用程序执行代码隐藏方法,并希望在大多数情况下继续这样做。但使用dataBinding并不是一个问题。

我的问题是:Window如何访问UserControl的控件或代码隐藏中保存的不同值,以便我可以在Window中的UserControl中保存必要的数据?

UserControl的XAML部分是必需的:

<TextBox x:Name="txtUserName" Grid.Row="0" Grid.Column="1" Margin="0,0,0,20"/>
<TextBox x:Name="txtName" Grid.Row="1" Grid.Column="1" Margin="0,11,0,31" Height="30" VerticalAlignment="Center" TextChanged="txtName_Change"/>
<ComboBox x:Name="cboPasswordExpire" Grid.Row="2" Grid.Column="3" Margin="0,0,0,20" Height="30"/>
<TextBox x:Name="txtUserID" Grid.Row="2" Grid.Column="1" Margin="0,0,0,20" Height="30" TextChanged="txtUserID_Change"/>

Window使用DataTable来保存值,这个DataTable(rowSecurityTrans)用于写入数据库。有关如何从Window中的UserControl访问值的示例是这样的(我在上面使用不起作用的对象的示例中使用了&#39; Ctrl&#39; ):

 rowSecurityTrans["Name"] = Ctrl.txtName.Text;
 rowSecurityTrans["UserID"] = Ctrl.txtUserID.Text;
 strUserName = userEditor.txtUserName.Text;
 rowSecurityTrans["PasswordDuration"] = General.PasswordConverter(Ctrl.cboPasswordExpire.SelectedIndex);

1 个答案:

答案 0 :(得分:0)

听起来你需要的是一个通用窗口,它将从任何来源获取它提供的任何数据并显示它。

您最好的选择是创建一个接口,其中每个其他类都实现了处理格式化和保存的接口,只需让窗口接受该接口类型的对象并调用这些方法来显示输出并保存数据

或者,另一方面,每个控件必须实现的接口处理自己的窗口显示并保存数据。