【问题标题】:WPF DataGrid in textbox文本框中的 WPF DataGrid
【发布时间】:2017-03-13 09:41:07
【问题描述】:

我在 XAML 和 C# 中有一个 WPF DataGrid,我想选择一行并在文本框中显示该行,它不是 DataGridView

x:Name="dtGConsultas" ItemsSource= "{Binding }" 
HorizontalAlignment="Left" Margin="12,3,0,0" Grid.Row="6" VerticalAlignment="Top" 
Grid.ColumnSpan="5" Height="111" Width="598" Grid.RowSpan="3" 
SelectionChanged="dtGConsultas_SelectionChanged"/>

【问题讨论】:

  • 如何将选中的项目绑定到文本框?
  • 我想选择一个显示数据网格的行,并且显示该行的数据显示在文本框中

标签: c# wpf wpfdatagrid


【解决方案1】:

这可以通过多种方式完成:

  1. 您可以将SelectedItem 绑定到某个属性,然后显示它
  2. 您可以将TextBox 值绑定到DataGridSelectedItem
  3. 您可以在每次调用SelectionChanged 方法时设置TextBox

如果您要使用 MVVM 模式,您应该选择 1st 选项。

其他 2nd3rd 选项对您很有用,但在更大(复杂)的应用程序中,此解决方案会导致难以轻松读取代码并对其进行维护。 不推荐。


示例:

  1. MVVM 方法

ViewModel 文件:

using using System.Collections.ObjectModel;

public class MyViewModel
{
    //add implementation of INotifyPropertyChange & propfull
    public ObservableCollection<MyItem> MySrcList { get; set; }

    //add implementation of INotifyPropertyChange & propfull
    public MyItem SelectedItem { get; set; }
}

查看:

<UserControl ...
    xmlns:local="clr-namespace:MyProject">
    <UserControl.DataContext>
        <local:MyProject />
    </UserControl.DataContext>

    ...

    <DataGrid
         ItemsSource="{Binding MySrcList}"
         SelectedItem="{Binding SelectedItem}"/>

  1. TB 值绑定到DataGridSelectedItem

Xaml 文件:

<Grid>
    <DataGrid
        x:Name="dtGConsultas"
        ItemsSource="{Binding MySrcList}"/>
    <TextBox Text="{Binding dtGConsultas.SelectedItem, Mode=OneWay}"/>
</Grid>

代码隐藏(C# 文件):

public class MyUserControl
{
    public MyUserControl()
    {
        this.InitializeComponent();
        this.DataContext = this;
    }

    public List<MyItem> MySrcList = new List<MyItem>();
}

  1. 方法更新(代码隐藏):

Xaml 文件:

<Grid>
    <DataGrid
        x:Name="dtGConsultas"
        ItemsSource="{Binding MySrcList}" 
        SelectionChanged="dtGConsultas_SelectionChanged"/>
    <TextBox x:Name="MyTbx"/>
</Grid>

代码隐藏(C# 文件):

public class MyUserControl
{
    public MyUserControl()
    {
        this.InitializeComponent();
        this.DataContext = this;
    }

    public List<MyItem> MySrcList = new List<MyItem>();

    private void dtGConsultas_SelectionChanged( /* args */)
    {
        MyTbx.Text = dtGConsultas.SelectedItem.ToString();
    }
}

【讨论】:

  • 不是 MVC,它是带有 C# 的 wpf
  • @AlexisRS -> 在 WPF 中,有一个常见的模式叫做 MVVM。视图(XAML 文件)仅用于格式化“GUI”,所有逻辑、属性定义、方法都隐藏在 ViewModel(C# 文件)中。在这种方法中,您应该尽量减少使用Code-Behind(直接方法调用)。
  • @AlexisRS - 其中哪一个?错误信息是什么?
  • 我正在处理一个项目 WPF 不是 ASP.NET 也不是没有 mvvm 模型的 windows 窗体,并且在 wpf 中 datagridview 不存在。
  • 消息是:DataGridView 与 Windows Presentation Foundation (WPF) 项目不兼容
【解决方案2】:

您还可以添加包含复选框的列并绑定它。然后检查是否(Your_List.element.CheckBox==true)。你可以得到一个包含你选中元素的列表

【讨论】:

  • 我相信这个答案不是 OP 要求的。
猜你喜欢
  • 1970-01-01
  • 2011-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 2014-01-01
  • 1970-01-01
相关资源
最近更新 更多