2017-07-19 34 views
5

Ürünlere sahip kategoriler koleksiyonu var.DataGrid seçimi kaybediyor

Her kategori, aralarında ürünlerle birlikte bir DataGrid'e sahip olan AvalonDock sekmesi tarafından temsil edilir.

Artık sekmeden sekmeye geçiş yaparken DataGrid koleksiyonu her seferinde günceller. İlk sekmedeki tabloda bir çift satır seçerseniz, ikinci sekmeye geçin ve ilkine dönün, seçim kaybolur.

Sorun ne olabilir?

XAML:

<xcad:DockingManager DocumentsSource="{Binding Examples}"> 
    <xcad:DockingManager.LayoutItemTemplate> 
     <DataTemplate> 
      <ListBox ItemsSource="{Binding Content.Items}" 
        SelectionMode="Extended" /> 
     </DataTemplate> 
    </xcad:DockingManager.LayoutItemTemplate> 
    <xcad:LayoutRoot /> 
</xcad:DockingManager>> 

kod arkadaki: @nobody önerdiği gibi

public partial class MainWindow : Window 
{ 
    public class Example 
    { 
     public List<int> Items { get; } = new List<int>(); 

     public Example() 
     { 
      for (var i = 0; i < 10; i++) 
      { 
       Items.Add(i); 
      } 
     } 
    } 

    public List<Example> Examples { get; } = new List<Example>(); 

    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = this; 
     Examples.Add(new Example()); 
     Examples.Add(new Example()); 
    } 
} 

enter image description here

+0

hiç denemedim ama IsSynchronizedWithCurrentItem yardımcı olabilir. –

+0

@SushilMate, Bu yardımcı olmadı. – maxwell

+0

Sekmeler arasında geçiş her zaman düzeni günceller, böylece seçimi temizler. Neden yerine 'TabControl' kullanmıyorsunuz? –

cevap

2

, sekmeler arasında geçiş düzenini güncellemek görünüyor ve Seçim durumunu kaybolur. Eğer UI seçim durumunu devam ettiremiyorsa, bunu yapmak için bir sonraki katmanı, yani sunum veya görünüm modelini kullanabilirsiniz.

Bu durumda, görünüm modeline IsSelected özelliği ekleme ve ListViewItem numarasına bir bağlantı eklemeniz gerekir.

enter image description here

XAML:

<Grid> 
    <xcad:DockingManager DocumentsSource="{Binding Examples}"> 
     <xcad:DockingManager.DocumentHeaderTemplate> 
      <DataTemplate> 
       <TextBlock Text="Doc" /> 
      </DataTemplate> 
     </xcad:DockingManager.DocumentHeaderTemplate> 
     <xcad:DockingManager.LayoutItemTemplate> 
      <DataTemplate> 
       <ListBox 
        DisplayMemberPath="Value" 
        ItemsSource="{Binding Content.Items}" 
        SelectionMode="Extended"> 
        <ListBox.Resources> 
         <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="LightBlue" /> 
         <Style TargetType="{x:Type ListBoxItem}"> 
          <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> 
         </Style> 
        </ListBox.Resources> 
       </ListBox> 
      </DataTemplate> 
     </xcad:DockingManager.LayoutItemTemplate> 
     <xcad:LayoutRoot /> 
    </xcad:DockingManager> 
</Grid> 

kod arkadaki:

public partial class MainWindow : Window 
{ 
    public class ExampleItem 
    { 
     public int Value { get; set; } 
     public bool IsSelected { get; set; } 
    } 
    public class Example 
    { 
     public List<ExampleItem> Items { get; } = new List<ExampleItem>(); 

     public Example() 
     { 
      for (var i = 0; i < 10; i++) 
      { 
       Items.Add(new ExampleItem { Value = i }); 
      } 
     } 
    } 

    public List<Example> Examples { get; } = new List<Example>(); 

    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = this; 
     Examples.Add(new Example()); 
     Examples.Add(new Example()); 
    } 
}