2017-03-13 112 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