Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 文本框中的WPF数据网格_C#_Wpf_Wpfdatagrid - Fatal编程技术网

C# 文本框中的WPF数据网格

C# 文本框中的WPF数据网格,c#,wpf,wpfdatagrid,C#,Wpf,Wpfdatagrid,我在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="

我在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"/>

这可以通过几种方式实现:

  • 您可以将
    SelectedItem
    绑定到某个属性,然后显示它
  • 您可以将
    TextBox
    值绑定到
    DataGrid
    SelectedItem
  • 您可以在每次调用
    SelectionChanged
    方法时设置
    TextBox
  • 如果要使用MVVM模式,则应选择1st选项

    其他2nd3rd选项对您很有用,但在更大(复杂)的应用程序中,此解决方案会导致问题,使您无法轻松阅读和维护代码不推荐。


    示例:

  • MVVM方法
  • ViewModel文件:

    代码隐藏(C#文件):

    公共类MyUserControl
    {
    公共MyUserControl()
    {
    this.InitializeComponent();
    this.DataContext=this;
    }
    public List mysrlist=new List();
    }
    

  • 方法更新(代码隐藏):
  • Xaml文件:

    
    
    代码隐藏(C#文件):

    公共类MyUserControl
    {
    公共MyUserControl()
    {
    this.InitializeComponent();
    this.DataContext=this;
    }
    public List mysrlist=new List();
    私有无效dtGConsultas_SelectionChanged(/*args*/)
    {
    MyTbx.Text=dtGConsultas.SelectedItem.ToString();
    }
    }
    
    您还可以添加包含复选框的列并绑定它。然后只需检查(您的_List.element.CheckBox==true)。您可以通过选中的元素获得一个列表

    如何将所选项目绑定到文本框?我想选择一行,该行显示datagrid,并且显示该行的数据显示在文本框中,而不是MVC,它是wpf with C#@AlexisRS->with wpf有一个称为
    MVVM
    的通用模式。视图(XAML文件)仅用于格式化“GUI”,所有逻辑、属性定义和方法都隐藏在
    ViewModel
    (C#file)中。在这种方法中,您应该尽量减少使用
    代码隐藏
    (直接方法调用)。@AlexisRS-哪种方法?什么是错误消息?我正在使用一个项目WPF不是ASP.NET,也没有Windows窗体,没有MVVM模型,并且在WPF DATAGRIDVIEW中不存在。消息是:DATAGRIDVIEW与Windows演示基金会(WPF)Project不兼容,认为这个答案不是OP所要求的。
    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}"/>
    
    <Grid>
        <DataGrid
            x:Name="dtGConsultas"
            ItemsSource="{Binding MySrcList}"/>
        <TextBox Text="{Binding dtGConsultas.SelectedItem, Mode=OneWay}"/>
    </Grid>
    
    public class MyUserControl
    {
        public MyUserControl()
        {
            this.InitializeComponent();
            this.DataContext = this;
        }
    
        public List<MyItem> MySrcList = new List<MyItem>();
    }
    
    <Grid>
        <DataGrid
            x:Name="dtGConsultas"
            ItemsSource="{Binding MySrcList}" 
            SelectionChanged="dtGConsultas_SelectionChanged"/>
        <TextBox x:Name="MyTbx"/>
    </Grid>
    
    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();
        }
    }