2014-03-12 96 views
0

對於我正在處理的i項目,我需要能夠例如選擇grid1中的第一行並自動將第一行也選擇在grid2中,以便在兩個網格中同時選擇了行。同時在兩個wpf數據網格中選擇一行

什麼都使用已經嘗試

  • 一個stackpanal

我創建了用於設置導報

 private void SyncDataGridItemSelection(int number) 
     { 
     //sync pricegrid with printertick grid 
     if (number == 1) 
     { 
      int printertickselection = PrinterTicksGrid.SelectedIndex; 
      //detachs change event 
      PrinterPriceGrid.SelectionChanged -= (PrinterPriceGrid_SelectionChanged); 
      //change printerpricegrid selection 
      PrinterPriceGrid.SelectedIndex = printertickselection; 
      //attach change event 
      PrinterPriceGrid.SelectionChanged += (PrinterPriceGrid_SelectionChanged); 
     } 
     //sync printertick grid with price grid 
     else if (number == 2) 
     { 
      int printerpriceselection = PrinterPriceGrid.SelectedIndex; 
      //detachs change event 
      PrinterTicksGrid.SelectionChanged -= (PrinterTicksGrid_SelectionChanged); 
      //change PrinterTicksgrid selection 
      PrinterTicksGrid.SelectedIndex = printerpriceselection; 
      //attach change event 
      PrinterTicksGrid.SelectionChanged += (PrinterTicksGrid_SelectionChanged); 
     } 
    } 

我也看了看所選項目的方法來自MSDN的文檔涉及重點,但沒有成功。

的GUI已經到位,因此重寫不是一個選項

這甚至可能做的,如果是的話怎麼辦?

回答

1

這個問題還不清楚。如果你總是選擇相同的行,那麼你可以把所有的數據放在一個數據網格中,除非你需要一個特定的佈局。但讓我試着解決你的問題,因爲它是。您可以將兩種選擇類型合併到一個類中。兩個Datagrids可以彼此連接而不使用古典事件。該解決方案是這樣的:

XAML

<Window x:Class="WpfApplication2.MainWindow" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        Title="MainWindow" Height="229.584" Width="270.818"> 
     <Grid> 
      <DataGrid AutoGenerateColumns="False" Name="DG1" HorizontalAlignment="Left" Height="190" Margin="10,0,0,0" VerticalAlignment="Top" Width="116" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding}" > 
       <DataGrid.Columns> 
        <DataGridTextColumn Header="Data A" Binding="{Binding AData.data}"/> 
       </DataGrid.Columns> 
      </DataGrid> 
      <DataGrid AutoGenerateColumns="False" Name="DG2" HorizontalAlignment="Left" Height="190" Margin="131,0,0,0" VerticalAlignment="Top" Width="116" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding}" > 
       <DataGrid.Columns> 
        <DataGridTextColumn Header="Data B" Binding="{Binding BData.data}"/> 
       </DataGrid.Columns> 
      </DataGrid> 
     </Grid> 
    </Window> 

C#源代碼

using System.Collections.Generic; 
    using System.Windows; 
    using System.Windows.Documents; 

    namespace WpfApplication2 { 
     public class A { 
      public int data { get; private set; } 
      public A(int x) { data = x; } 
     } 

     public class B { 
      public string data { get; private set; } 
      public B(string x) { data = x; } 
     } 

     public class C { 
      public A AData { get; set; } 
      public B BData { get; set; } 
     } 

     public partial class MainWindow : Window { 

      public MainWindow() { 
       InitializeComponent(); 

       List<A> lIntegers = new List<A>() { new A(1), new A(2), new A(3), new A(4) }; 
       List<B> lStrings = new List<B>() { new B("a"), new B("b"), new B("c"), new B("d") }; 
       List<C> lParent = new List<C>(); 

       for (int i = 0; i < 4; i++) { 
        C c = new C(); 
        lParent.Add(c); 
        c.AData = lIntegers[i]; 
        c.BData = lStrings[i]; 
       } 

       DG1.DataContext = lParent; 
       DG2.DataContext = lParent; 
      } 
     } 
    } 

enter image description here

www.ohta.de

相關問題