2017-03-13 6 views
1

ich eine WPF-Datagrid in XAML und C# habe und ich mag eine Zeile auszuwählen und die Zeile in dem Textfeld angezeigt wird, ist es nicht ein DatagridviewWPF Datagrid in Textbox

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

was ist mit ausgewählten Element an die Textbox binden? – Vladimir

+0

Ich möchte eine Zeile auswählen, die das Datagrid zeigt und dass diese Daten, die die Zeile zeigt, in dem Textfeld – AlexisRS

Antwort

2

Dies kann getan werden, in mehr Möglichkeiten:

  1. Sie SelectedItem bis zu einem gewissen Eigenschaft binden können und es dann angezeigt
  2. Sie TextBox Wert auf die DataGrid binden können ‚s SelectedItem
  3. Sie können einstellen, den TextBox Wert bei jedem Aufruf von SelectionChanged Methode

Wenn Sie MVVM Muster verwenden möchten, sollten Sie 1. Option wählen.

Andere 2. ein 3. Optionen sind nützlich für Sie, aber in größeren (komplexen) Anwendungen dieser Lösungen würde Probleme verursachen den Code leicht & zu halten, es zu lesen. Nicht empfohlen.


Beispiele:

  1. MVVM Ansatz

Ansichtsmodell-Datei:

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; } 
} 

Ausblick:

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

    ... 

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

  1. Bindung TB Wert auf den Wert der DataGrid ‚s SelectedItem

XAML-Datei:

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

-Code-behind (C# Datei):

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

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

  1. -Update in Methode (-Code-behind):

Xaml-Datei:

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

-Code-Behind (C# Datei):

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

nicht MVC, es ist WPF mit C# – AlexisRS

+0

@AlexisRS -> mit WPF gibt es gemeinsame Muster namens 'MVVM'. View (XAML-Datei) ist nur für die Formatierung der "GUI" und alle Logik, Eigenschaft Definition, Methoden sind in 'ViewModel' (C# -Datei) versteckt. Und bei diesem Ansatz sollten Sie die Verwendung von "Code-Behind" (direkte Methodenaufrufe) ** minimieren. – Tatranskymedved

+0

Gibt mir einen Fehler in der DataGridView-Tag – AlexisRS

0

Sie können auch eine Spalte hinzufügen, die eine Checkbox enthält, und Sie binden es. Dann überprüfe, ob (Your_List.element.CheckBox == true). Sie können eine Liste mit Ihren überprüften Elementen erhalten

+0

Ich glaube, dass diese Antwort nicht ist, was OP verlangt. – Tatranskymedved

+0

Stimmt, kämpfe nicht, aber vielen Dank – AlexisRS