2017-07-19 16 views
5

उत्पादों के साथ श्रेणियों का संग्रह है।डेटाग्रिड चयन खो देता है

प्रत्येक श्रेणी को एवलॉन डॉक टैब द्वारा इंटरफेस में दर्शाया गया है, जिसमें उत्पादों के साथ डेटाग्रिड है।

अब टैब से टैब पर स्विच करते समय, डेटाग्रिड हर बार संग्रह अपडेट करता है। यदि आप पहले टैब पर तालिका में पंक्तियों की एक जोड़ी चुनते हैं, तो दूसरे टैब पर स्विच करें और पहले पर लौटें, चयन गायब हो जाता है।

समस्या क्या हो सकती है?

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

कोड-पीछे:

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

इसे करने की कोशिश नहीं की है, लेकिन IsSynchronizedWithCurrentItem मदद मिल सकती है। –

+0

@ सुशीलमेट, इससे मदद नहीं मिली। – maxwell

+0

ऐसा लगता है कि टैब के बीच स्विचिंग हर बार चयन को साफ़ करने के लिए लेआउट अपडेट करता है। आप इसके बजाय 'TabControl' का उपयोग क्यों नहीं करेंगे? –

उत्तर

2

@nobody के रूप में सुझाव दिया, टैब के बीच स्विच लेआउट अद्यतन करने के लिए लगता है, और चयन राज्य खो दिया है। यदि यूआई चयन स्थिति को जारी नहीं रख सकता है, तो आप इसे करने के लिए अगली परत यानी प्रेजेंटेशन या व्यू-मॉडल का उपयोग कर सकते हैं।

इस मामले में, IsSelected संपत्ति को देखने के लिए मॉडल को जोड़ने और ListViewItem पर बाध्यकारी चाल चलाना चाहिए।

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> 

कोड-पीछे:

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()); 
    } 
} 
संबंधित मुद्दे