2009-12-09 16 views
6

से चयनित इटैम अपडेट कर रहा है जब मैं कोड से एक डेटाग्रिड चयनित इटैम अपडेट करता हूं (एक व्यूमोडेल में बाध्य वस्तु के माध्यम से), मैं नए चयनित आइटम को हाइलाइट करने के लिए दृश्य ग्रिड कैसे प्राप्त करूं?सिल्वरलाइट डेटाग्रिड कोड

धन्यवाद,
मार्क

अद्यतन: यह अभी भी मेरे लिए एक मुद्दा है। मेरी चुनीItem प्रॉपर्टी पहले से ही अधिसूचना अधिसूचना लागू करती है, लेकिन डेटाग्रिड विस्मय प्रदर्शित करता है कि कौन सी पंक्ति का चयन किया गया है - यानी इसे हाइलाइट नहीं किया जा रहा है।

उत्तर

3

मुझे लगता है कि आप वास्तव में सत्यापित है कि SelectedItem बदल गया है (आप अगर यह इसके विपरीत काम करता है, पंक्ति पर क्लिक करके देखने के लिए आप को उजागर और SelectedItem के देखना चाहिए TwoWay अस्थायी रूप से करने के लिए Binding मोड सेट कर सकते हैं set -method निष्पादित)। यदि हां, तो सत्यापित करें कि आप वास्तव मेंPropertyChanged विधि आवेषण पर संपत्ति नाम से बिल्कुल मेल खाते हैं। चूंकि आप यहां टाइपएफ़ नहीं हैं, इसलिए आपने वर्तनी त्रुटि की हो सकती है। यदि नहीं, तो जांचें कि क्या आपका डाटाबेसिंग विशेषता सही ढंग से सेट है या नहीं। एक और विचार यह है कि आपने DataGrid की शैलियों या टेम्पलेट को बदल दिया होगा और अब आप दृश्य राज्य में से कुछ खो रहे हैं। DataGridRow शैली टेम्पलेट का उपयोग करके स्टाइल किया जा सकता है। आपके पास तीन चयनित राज्य हैं, जिन्हें UnfocusedSelected (शायद सही एक) कहा जाता है, NormalSelected और MouseOverSelected

आप इस टेम्पलेट का उपयोग करके अपने खुद के दृश्य राज्य बनाने के लिए कोशिश कर सकते:

<Style TargetType="local:DataGridRow"> 
<Setter Property="IsTabStop" Value="False" /> 
<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="local:DataGridRow"> 
      <localprimitives:DataGridFrozenGrid Name="Root"> 
       <vsm:VisualStateManager.VisualStateGroups> 
        <vsm:VisualStateGroup x:Name="CommonStates"> 
         <vsm:VisualState x:Name="Normal"/> 
        <vsm:VisualState x:Name="NormalAlternatingRow"> 
          <Storyboard> 
           <DoubleAnimation Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" Duration="0" To="0"/> 
          </Storyboard> 
         </vsm:VisualState> 
         <vsm:VisualState x:Name="MouseOver"> 
          <Storyboard> 
           <DoubleAnimation Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" Duration="0" To=".5"/> 
          </Storyboard> 
         </vsm:VisualState> 
         <vsm:VisualState x:Name="NormalSelected"> 
          <Storyboard> 
           <DoubleAnimation Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" Duration="0" To="1"/> 
          </Storyboard> 
         </vsm:VisualState> 
         <vsm:VisualState x:Name="MouseOverSelected"> 
          <Storyboard> 
           <DoubleAnimation Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" Duration="0" To="1"/> 
          </Storyboard> 
         </vsm:VisualState> 
         <vsm:VisualState x:Name="UnfocusedSelected"> 
          <Storyboard> 
           <DoubleAnimation Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" Duration="0" To="1"/> 
           <ColorAnimation Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="(Fill).Color" To="#FFE1E7EC"/> 
          </Storyboard> 
         </vsm:VisualState> 
        </vsm:VisualStateGroup> 
        <vsm:VisualStateGroup x:Name="ValidationStates"> 
         <vsm:VisualState x:Name="Valid"/> 
         <vsm:VisualState x:Name="Invalid"> 
          <Storyboard> 
           <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Visibility"> 
            <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> 
           </ObjectAnimationUsingKeyFrames> 
           <DoubleAnimation Storyboard.TargetName="InvalidVisualElement" Storyboard.TargetProperty="Opacity" Duration="0" To="1"/> 
          </Storyboard> 
         </vsm:VisualState> 
        </vsm:VisualStateGroup> 
       </vsm:VisualStateManager.VisualStateGroups> 
       <Grid.RowDefinitions> 
        <RowDefinition/> 
        <RowDefinition Height="Auto"/> 
        <RowDefinition Height="Auto"/> 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto" /> 
        <ColumnDefinition/> 
       </Grid.ColumnDefinitions> 

       <Grid.Resources> 
        <Storyboard x:Key="DetailsVisibleTransition"> 
         <DoubleAnimation Storyboard.TargetName="DetailsPresenter" Storyboard.TargetProperty="ContentHeight" Duration="00:00:0.1" /> 
        </Storyboard> 
       </Grid.Resources> 

       <Rectangle x:Name="BackgroundRectangle" Grid.RowSpan="2" Grid.ColumnSpan="2" Opacity="0" Fill="#FFBADDE9"/> 
       <Rectangle x:Name="InvalidVisualElement" Grid.RowSpan="2" Grid.ColumnSpan="2" Opacity="0" Fill="#FFF7D8DB"/> 

       <localprimitives:DataGridRowHeader Grid.RowSpan="3" Name="RowHeader" localprimitives:DataGridFrozenGrid.IsFrozen="True" /> 
       <localprimitives:DataGridCellsPresenter Grid.Column="1" Name="CellsPresenter" localprimitives:DataGridFrozenGrid.IsFrozen="True" /> 
       <localprimitives:DataGridDetailsPresenter Grid.Row="1" Grid.Column="1" Name="DetailsPresenter" /> 
       <Rectangle Grid.Row="2" Grid.Column="1" Name="BottomGridLine" HorizontalAlignment="Stretch" Height="1" /> 
      </localprimitives:DataGridFrozenGrid> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 
</Style> 

यह डेटा ग्रिड शैलियाँ अनुरूपण पर एक अच्छा MSDN Article से एक कॉपी-पेस्ट है। उदाहरण के लिए, आप टेम्पलेट के UnfocusedSelected भाग को संशोधित कर सकते हैं और देख सकते हैं कि क्या आप कोई परिवर्तन देखते हैं, उदाहरण के लिए, इसके चारों ओर एक लाल सीमा जोड़ना।

शायद यह एक कोशिश के लायक है। मुझे उम्मीद है कि आप जानते हैं कि अपनी शैलियों को कैसे लागू करें। यदि नहीं, तो यहां एक और MSDN Resource है।

मुझे पता है, ये सिर्फ युक्तियां हैं, लेकिन आखिरकार सहायक हो सकती हैं।

0

आप अपने ViewModel पर INotifyPropertyChanged इंटरफ़ेस को लागू है और इसके SelectedItem संपत्ति PropertyChanged घटना आह्वान जब अपने मूल्य परिवर्तन है की आवश्यकता है।

+0

मेरे पास INotifyPropertyChanged है और एक संपत्ति का मूल्य निर्धारित कर रहा हूं जो पहले से ही PropertyChanged ईवेंट को आमंत्रित करता है। –