2012-02-28 19 views
10

नेट 4 WPF डेटा ग्रिड सी # MMVMDataGrid SelectionUnit = सेल किसी चयनित पंक्ति के लिए सभी समर्थन अक्षम करता है?

जब डेटा ग्रिड SelectionUnit पूर्ण पंक्ति, डेटा बाइंडिंग WPF और collectionview दे मुझे viewmodel देखने के CurrentItem संपत्ति के माध्यम से सक्रिय रूप से चयनित आइटम है क्या में पता की देखभाल। यह पूर्ण मोड में सेट चयन मोड के साथ रीडोनली ग्रिड के लिए बहुत अच्छा काम करता है।

अब मेरे पास एक संपादन योग्य ग्रिड है। इसलिए मैंने SelectionUnit = सेल सेट किया है ताकि यह पता लगाना आसान हो कि कौन सा सेल अंदर है। अब अचानक ग्रिड में चयन आइटम को ट्रैक करने की कोई क्षमता नहीं है। सेल मोड पर सेट करते समय मैं चयनित इटैम भी सेट नहीं कर सकता। तो अब व्यूमोडेल हमेशा सोचता है कि यह पहली पंक्ति पर है। मैं ग्रिड में चुने गए चयनित कैल्स को संभाल सकता हूं ताकि पता चल सके कि मैं किस पंक्ति पर हूं, मेरे पास व्यूमोडेल को जानने का कोई तरीका नहीं है क्योंकि ग्रिड के चयनित इटैम को अब सेट नहीं किया जा सकता है!

मुझे समझ में नहीं आता कि सेल चयन मोड में ग्रिड के पास अभी भी चयनित इटैम क्यों नहीं हो सकता है।

मेरे ग्रिड में हार्डकोडिंग का संक्षिप्त विवरण आइटम संग्रह को मेरे संग्रहदृश्य में डालने के लिए MoveCurrent को चुनने के लिए चयनित कैल्स चेंज इवेंट से, क्या कोई अन्य एमवीवीएम सही तरीका है ताकि दृश्य के CurrentItem को ग्रिड के साथ सिंक में रखा जा सके?

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

+0

यदि आपको "हार्डकोड" करना है, तो इंटरफ़ेस –

+0

बनाएं, हां, मैंने अभी तक यह किया है। – happyfirst

+0

मैंने अभी 'डेटाग्रिड' स्रोत और 'सेल' मोड में देखा, वे 'चयनित इटैम' के साथ सिंक नहीं करते हैं –

उत्तर

0

मुझे भी एक ही समस्या है, इसलिए यहां स्टाइल का उपयोग किया गया है (नेट से कॉपी किया गया)। तो आप व्हिस्लरब्लू थीम को http://datagridthemesfromsl.codeplex.com/ से कॉपी करें और निम्न संशोधन करें। उम्मीद है की यह मदद करेगा।

<!--Cell--> 
<Style x:Key='CellStyle' TargetType="{x:Type controls:DataGridCell}" > 
    <Setter Property="Foreground" Value="{StaticResource ThemeForegroundBrush}" /> 
    <Setter Property="Height" Value="Auto" /> 
    <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
    <Setter Property="VerticalContentAlignment" Value="Stretch"/> 
    <Setter Property="Cursor" Value="Arrow" /> 
    <Setter Property="BorderThickness" Value="1" /> 
    <!--Padding hack--> 
    <Setter Property="Padding" Value="2 5 2 5" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type controls:DataGridCell}"> 
       <Grid x:Name="Root" Background="Transparent"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="Auto" /> 
        </Grid.ColumnDefinitions> 
        <Rectangle x:Name="FocusVisual" Margin="0,-2,0,0" 
           Stroke="White" Fill="White" 
           Opacity="0" IsHitTestVisible="false"/> 
        <ContentPresenter Margin="{TemplateBinding Padding}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
             VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content="{TemplateBinding Content}" 
             ContentTemplate="{TemplateBinding ContentTemplate}" Cursor="{TemplateBinding Cursor}"/> 
        <Rectangle x:Name="RightGridLine" VerticalAlignment="Stretch" Width="1" Grid.Column="1" /> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 

</Style> 

<!-- DataGridRow --> 
<Style x:Key='RowStyle' TargetType="{x:Type controls:DataGridRow}"> 
    <Setter Property="Background" Value="Transparent" /> 
    <Setter Property="SnapsToDevicePixels" Value="true"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type controls:DataGridRow}"> 
       <Border x:Name="DGR_Border" 
       Background="{TemplateBinding Background}" 
       BorderBrush="{TemplateBinding BorderBrush}" 
       BorderThickness="{TemplateBinding BorderThickness}" 
       SnapsToDevicePixels="True"> 
        <primitives:SelectiveScrollingGrid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="Auto"/> 
          <ColumnDefinition Width="*"/> 
         </Grid.ColumnDefinitions> 

         <Grid.RowDefinitions> 
          <RowDefinition Height="*"/> 
          <RowDefinition Height="Auto"/> 
          <RowDefinition Height='Auto' /> 
         </Grid.RowDefinitions> 
         <Rectangle x:Name="Selected" Margin="0" Grid.RowSpan="2" Grid.ColumnSpan="2" 
           Fill="{StaticResource BtnOverFill}" Stroke="{StaticResource selectedStroke}" 
           Opacity="0"/> 
         <Rectangle x:Name="SelectedHighlight" Margin="1" Grid.RowSpan="2" Grid.ColumnSpan="2" 
           Stroke="#A0FFFFFF" 
           Opacity="0"/> 
         <primitives:DataGridRowHeader Grid.RowSpan="2" 
                primitives:SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical"          
                Visibility="{Binding RelativeSource={RelativeSource AncestorType={x:Type controls:DataGrid}}, 
          Path=HeadersVisibility, 
          Converter={x:Static controls:DataGrid.HeadersVisibilityConverter}, 
          ConverterParameter={x:Static controls:DataGridHeadersVisibility.Row}}"/> 
         <Rectangle x:Name="Over" Margin="0" Grid.RowSpan="2" Grid.ColumnSpan="2" 
           Fill="{StaticResource hoverGradient}" 
           Stroke="{StaticResource hoverStroke}" 
           Opacity="0"/> 
         <primitives:DataGridCellsPresenter Grid.Column="1" 
             ItemsPanel="{TemplateBinding ItemsPanel}" 
             SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
         <primitives:DataGridDetailsPresenter Grid.Column="1" Grid.Row="1" 
                  x:Name='DetailsPresenter' 
                  primitives:SelectiveScrollingGrid.SelectiveScrollingOrientation="{Binding RelativeSource={RelativeSource AncestorType={x:Type controls:DataGrid}}, Path=AreRowDetailsFrozen, Converter={x:Static controls:DataGrid.RowDetailsScrollingConverter}, ConverterParameter={x:Static controls:SelectiveScrollingOrientation.Vertical}}"                               
                  Visibility="{TemplateBinding DetailsVisibility}"                
                  /> 
         <Rectangle Height="1" HorizontalAlignment="Stretch" 
            x:Name="BottomGridLine" 
            Fill="{StaticResource HorizontalVerticalGridLinesBrush}" 
            Grid.Column="1" Grid.Row="2" /> 
        </primitives:SelectiveScrollingGrid> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property='IsSelected' Value='True'> 
         <Trigger.EnterActions> 
          <BeginStoryboard> 
           <Storyboard> 
            <DoubleAnimation Duration="0" Storyboard.TargetName="Selected" Storyboard.TargetProperty="Opacity" To="0.84"/> 
            <DoubleAnimation Duration="0" Storyboard.TargetName="SelectedHighlight" Storyboard.TargetProperty="Opacity" To="1"/> 
           </Storyboard> 
          </BeginStoryboard> 
         </Trigger.EnterActions> 
         <Trigger.ExitActions> 
          <BeginStoryboard> 
           <Storyboard> 
            <DoubleAnimation Duration="0" Storyboard.TargetName="Selected" Storyboard.TargetProperty="Opacity" To="0"/> 
            <DoubleAnimation Duration="0" Storyboard.TargetName="SelectedHighlight" Storyboard.TargetProperty="Opacity" To="0"/> 
           </Storyboard> 
          </BeginStoryboard> 
         </Trigger.ExitActions> 
         <!--<Setter Property="DetailsVisibility" Value="Visible" />--> 
        </Trigger> 
        <MultiTrigger > 
         <MultiTrigger.Conditions> 
          <Condition Property="IsMouseOver" Value="True" /> 
          <Condition Property="IsSelected" Value="False" /> 
         </MultiTrigger.Conditions> 
         <MultiTrigger.EnterActions> 
          <BeginStoryboard> 
           <Storyboard> 
            <DoubleAnimation Duration="0" Storyboard.TargetName="Over" Storyboard.TargetProperty="Opacity" To="0.73"/> 
           </Storyboard> 
          </BeginStoryboard> 
         </MultiTrigger.EnterActions> 
         <MultiTrigger.ExitActions> 
          <BeginStoryboard> 
           <Storyboard> 
            <DoubleAnimation Duration="0" Storyboard.TargetName="Over" Storyboard.TargetProperty="Opacity" To="0"/> 
           </Storyboard> 
          </BeginStoryboard> 
         </MultiTrigger.ExitActions> 
        </MultiTrigger> 
        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="IsSelected" Value="True" /> 
          <Condition Property="IsFocused" Value="False" /> 
         </MultiTrigger.Conditions> 
         <MultiTrigger.EnterActions> 
          <BeginStoryboard> 
           <Storyboard> 
            <DoubleAnimation Duration="0" Storyboard.TargetName="Selected" Storyboard.TargetProperty="Opacity" To="0.84"/> 
            <DoubleAnimation Duration="0" Storyboard.TargetName="SelectedHighlight" Storyboard.TargetProperty="Opacity" To="1"/> 
           </Storyboard> 
          </BeginStoryboard> 
         </MultiTrigger.EnterActions> 
         <MultiTrigger.ExitActions> 
          <BeginStoryboard> 
           <Storyboard> 
            <DoubleAnimation Duration="0" Storyboard.TargetName="Selected" Storyboard.TargetProperty="Opacity" To="0"/> 
            <DoubleAnimation Duration="0" Storyboard.TargetName="SelectedHighlight" Storyboard.TargetProperty="Opacity" To="0"/> 
           </Storyboard> 
          </BeginStoryboard> 
         </MultiTrigger.ExitActions> 
        </MultiTrigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
5

मैं एक ही समस्याओं के लिए खोज रहा था और पाया एक सरल उपाय

Cell को SelectionUnit समूह वाली उस पंक्ति को एक्सेस करने के लिए आपको क्या करना है:

DataGridXX.SelectedCells[0].item 

यह केवल यदि आप काम करता है समय पर केवल एक सेल का चयन कर सकते हैं (विस्तारित मोड में नहीं)।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^