WPF窗体中实现文本框与按钮绑定 点击按钮填充对应文本框
问题原因
- 点击事件中赋值的是窗口的
DataContext,而非被点击按钮的DataContext,绑定到按钮上下文的文本框无法接收更新 - 文本框仅绑定了
DataContext数据源上下文,没有绑定Text显示属性,即使上下文更新也不会显示内容 - 两个对比文件选择按钮未绑定点击事件,点击后不会触发选择逻辑
修复方案
第一步:修改XAML代码
- 为所有3个按钮绑定同一个点击事件,同时用
Tag属性关联对应要填充的文本框 - 删除文本框中冗余的
DataContext绑定
核心修改后的XAML片段:
<GroupBox Header="Create .txt File From Workbook" HorizontalAlignment="Left" Height="118" Margin="10,10,0,0" VerticalAlignment="Top" Width="772" BorderBrush="Black"> <Grid Margin="0,0,0,4"> <Button x:Name="workbookSelect_btn" Content="Select WB Path" HorizontalAlignment="Left" Margin="10,30,0,0" VerticalAlignment="Top" Width="102" Click="Click_SelectFilePath" Tag="{Binding ElementName=workbookPath_txt}" Height="23" /> <TextBox x:Name="workbookPath_txt" HorizontalAlignment="Left" Height="23" Margin="126,30,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="624"/> </Grid> </GroupBox> <GroupBox Header="Compare .txt Files" HorizontalAlignment="Left" Height="140" Margin="10,156,0,0" VerticalAlignment="Top" Width="772" BorderBrush="Black"> <Grid Margin="0,0,0,-42"> <Button x:Name="selectDev_btn" Content="Select Dev File" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="96" Click="Click_SelectFilePath" Tag="{Binding ElementName=devFilePath}" Height="23"/> <Button x:Name="selectProd_btn" Content="Select Prod File" HorizontalAlignment="Left" Margin="10,48,0,0" VerticalAlignment="Top" Width="96" Click="Click_SelectFilePath" Tag="{Binding ElementName=prodFilePath}" Height="23"/> <TextBox x:Name="devFilePath" HorizontalAlignment="Left" Height="23" Margin="120,10,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="630"/> <TextBox x:Name="prodFilePath" HorizontalAlignment="Left" Height="23" Margin="120,48,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="630"/> </Grid> </GroupBox>
第二步:修改后台点击事件代码
private void Click_SelectFilePath(object sender, RoutedEventArgs e) { System.Windows.Forms.OpenFileDialog ofd = new System.Windows.Forms.OpenFileDialog(); ofd.Title = "Find File"; ofd.Filter = "Excel Files (*.xls) | *.xlsm | All Files(*.*) | *.*"; // 仅用户确认选择文件时才赋值 if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { Button clickedButton = sender as Button; TextBox targetTextBox = clickedButton.Tag as TextBox; targetTextBox.Text = ofd.FileName; } }
内容的提问来源于stack exchange,提问作者KarkMump
相关产品推荐
相关产品推荐

