[英]WPF - Set TextBox Text to value of dropdown menu
我想将文本框的文本设置为wpf中另一个窗口的下拉菜单的值。
我在网上搜索了一个解决方案,但问题似乎太具体了,我不知道如何制定适当的搜索条件。
我在MainWindow.xaml中有以下代码:
<ComboBox x:Name="SelectServerDropdown" SelectedIndex="0" Margin="95,289,481.333,106.667" Padding ="2, 2, 2, 2" Height="Auto">
<ComboBoxItem>Server 1</ComboBoxItem>
<ComboBoxItem>Server 2</ComboBoxItem>
要获取选定的项目和值,在MainWindow.xaml.cs中,我具有:
ComboBoxItem selectServerDropdownItem = (ComboBoxItem)SelectServerDropdown.SelectedItem;
string ServerName = selectServerDropdownItem.Content.ToString();
我通过单击MainWindow.xaml中的“选项”按钮来启动OptionsWindow.xaml。 我应该在OptionsWindow.xaml中放入什么:
<TextBlock Text="Servername" FontWeight="Bold"/>
<TextBox x:Name="ServernameField" Padding="2px" Text=???/>
或如何检索值以将其传递给OptionsWindow.xaml中的“文本”?
现在该看看MVVM模式了 。
您应该具有一个视图模型类,该类具有的属性应将视图用作数据绑定的源。 两个窗口将在其DataContext中共享视图模型的实例。
最简单的视图模型:
public class ViewModel
{
public IEnumerable<string> ServerNames { get; }
= new string[] { "Server 1", "Server 2" };
public string SelectedServerName { get; set; }
= "Server 1";
}
public partial class MainWindow : Window
{
private readonly ViewModel viewModel = new ViewModel();
public MainWindow()
{
DataContext = viewModel;
InitializeComponent();
}
}
它会像ComboBox一样使用
<ComboBox ItemsSource="{Binding ServerNames}"
SelectedItem="{Binding SelectedServerName}"/>
OptionsWindow将使用
<TextBox Text="{Binding SelectedServerName}"/>
其DataContext将在MainWindow中创建时设置:
var options = new OptionsWindow { DataContext = viewModel };
options.Show();
如果在后面的代码中更改视图模型的SelectedServerName
属性时需要更新MainWindow中的ComboBox,则视图模型类将需要实现INotifyPropertyChanged接口并从属性设置器中触发PropertyChanged事件。
您可以从主窗口访问值,如下所示:
((MainWindow)Application.Current.MainWindow)
您只需调用MainWindow的现有实例并将其强制转换即可访问其成员。
之后,您只需使用后面的代码来填写您在MainWindow中填充的ServerName
中的值:
ServernameField.Text = ((MainWindow)Application.Current.MainWindow).ServerName;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.