WPF文本框和浏览文件-有没有更优雅的解决方案

本文关键字:解决方案 有没有 文本 浏览 文件 WPF | 更新日期: 2023-09-27 18:12:21

我有一个简单的文本框+文件对话框场景。文本框绑定到集合中的对象。我想选择文件并让它填充文本框,这将更新绑定对象属性。设法将文件名放入文本框,但随后文本框绑定没有触发,因为它没有检测到更改。我必须添加一个focus()更改来触发更新。有没有更好的办法?

<TextBox Text="{Binding Path=FlexString1,Mode=TwoWay}" 
         Height="23" 
         HorizontalAlignment="Left" 
         Margin="10" Name="textPath" 
         VerticalAlignment="Top" 
         Width="236" />
<Button Height="25" 
        HorizontalAlignment="Left" 
        Margin="0" 
        Name="btnBrowseFile" 
        Padding="1" VerticalAlignment="Top" 
        Width="45" Click="btnBrowseFile_Click">
  <TextBlock FontSize="10" 
             FontWeight="Normal" 
             Foreground="#FF3C3C3C" 
             Text="Browse" 
             TextWrapping="Wrap" />
</Button>
private void btnBrowseFile_Click(object sender, RoutedEventArgs e)
{
    // Configure open file dialog box
    Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
    //dlg.FileName = "Document"; // Default file name
    //dlg.DefaultExt = ".txt"; // Default file extension
    //dlg.Filter = "Text documents (.txt)|*.txt"; // Filter files by extension
    // Show open file dialog box
    Nullable<bool> result = dlg.ShowDialog();
    // Process open file dialog box results
    if (result == true)
    {
        // Open document
        TextBox path = (TextBox)(((FrameworkElement)sender).Parent as FrameworkElement).FindName("textPath");
        path.Text = dlg.FileName;
        path.Focus(); //these 2 lines force the binding to trigger
        ((Button)sender).Focus();
    }
}   

WPF文本框和浏览文件-有没有更优雅的解决方案

直接设置视图模型属性FlexString1

绑定将确保UI得到正确更新。

你也可以把浏览对话框放在命令上,这样它就可以从视图模型而不是视图中完成。

文本框的默认更新是LostFocus。试着把它改成PropertyChanged:

<TextBox Text="{Binding Path=FlexString1,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
相关文章: