2017-03-13 66 views
1

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

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"/> 
+0

那么将选定的项目绑定到文本框? – Vladimir

+0

我想选择一个显示数据网格的行,并且显示该行的数据在文本框中出现 – AlexisRS

回答

2

这可以完成几种方法:

  1. 可以绑定SelectedItem一些属性,然后显示它
  2. 可以TextBox值绑定到DataGridSelectedItem
  3. 您可以设置SelectionChanged方法

如果您将使用MVVM模式的每个呼叫的TextBox值,你应该选择选项。

其他第二的选择对你来说是有用的,但在更大的(复杂)的应用解决方案,这会导致问题,阅读代码容易&维护它。 不推荐。


实例:

  1. MVVM方法

视图模型的文件:

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}"/> 

  • 绑定TBDataGridSelectedItem
  • 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>(); 
    } 
    

  • 在方法更新(代码隐藏):
  • 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(); 
        } 
    } 
    
    +0

    不是MVC,它是使用C#的WPF – AlexisRS

    +0

    @AlexisRS - >使用WPF时,存在一个名为'MVVM'的常见模式。 View(XAML文件)仅用于格式化“GUI”,并且所有逻辑,属性定义,方法都隐藏在“ViewModel”(C#文件)中。在这种方法中,您应该**最小化**使用“代码隐藏”(直接方法调用)。 – Tatranskymedved

    +0

    在DataGridView标记中给我提供的错误 – AlexisRS

    0

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

    +0

    我相信这个答案不是OP要求的。 – Tatranskymedved

    +0

    真的,不要战斗,但非常感谢你 – AlexisRS