2013-06-28 9 views
8

के रूप में आप नीचे देख सकते मैं, एक सरल शैली डेटा ट्रिगर है कि यह एक viewmodel संपत्ति से मूल्य बाध्यकारी है खींचती है बनाने के लिए कोशिश कर रहा हूँ:datatrigger संपत्ति ViewModel के लिए बाध्य

 <StackPanel Name="stackTextPanel" Orientation="Horizontal" Margin="0,8,0,0"> 
      <StackPanel.Style> 
       <Style TargetType="{x:Type StackPanel}"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding QuickDrawBarPinned}" Value="False"> 
          <Setter Property="Margin" Value="0,8,0,0" /> 
         </DataTrigger> 
         <DataTrigger Binding="{Binding QuickDrawBarPinned}" Value="True"> 
          <Setter Property="Margin" Value="0,48,0,0" /> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </StackPanel.Style> 

मैं भी संस्करण की कोशिश की है

Binding="{Binding Path=QuickDrawBarPinned}" 

लेकिन यह अभी भी काम नहीं कर रहा है जब मैं बटन कि बदलता है QuickDrawBarPinned संपत्ति क्या मैं गलत कर रहा हूँ प्रेस?

मैं संपत्ति के रूप में इसलिए अपनाया है:

private bool _quickDrawBarPinned = false; 
    /// <summary> 
    /// Indicates if the Quick Draw Bar is pinned (stuck) or unpinned (retractable) 
    /// </summary> 
    public bool QuickDrawBarPinned 
    { 
     get { return _quickDrawBarPinned; } 
     set 
     { 
      _quickDrawBarPinned = value; 
      OnPropertyChanged("QuickDrawBarPinned"); 
     } 
    } 

इस विधि कि परिवर्तन नियंत्रण

public virtual void OnPropertyChanged(string propertyInfo) 
    { 
     App.Current.Dispatcher.BeginInvoke((Action)(() => 
     { 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(propertyInfo)); 
      } 
     } 
     )); 
    } 

उत्तर

13

मुझे लगता है कि आप अपने मार्जिन

<StackPanel Name="stackTextPanel" Orientation="Horizontal"> 
     <StackPanel.Style> 
      <Style TargetType="{x:Type StackPanel}"> 
       <Setter Property="Margin" Value="0,8,0,0" /> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding QuickDrawBarPinned}" Value="False"> 
         <Setter Property="Margin" Value="0,8,0,0" /> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding QuickDrawBarPinned}" Value="True"> 
         <Setter Property="Margin" Value="0,48,0,0" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </StackPanel.Style> 
+0

बिंगो, धन्यवाद! मुझे लगता है कि यह दोनों उत्तरों का एक संयोजन था जिसने मेरी मदद की, मैं पहले परिवर्तन अधिसूचना को शामिल करना भूल गया था, क्योंकि मैंने पहले स्थानीय मार्जिन संपत्ति को हटाने का प्रयास किया था और यह काम नहीं करता था। तो दोनों उत्तरों को लागू करके मैंने इस मुद्दे को हल किया, धन्यवाद! – MikeDub

1

आप संपत्ति परिवर्तन में अधिसूचना वंचित हो सकते हैं लागू करता है। कृपया पुष्टि करें अपने viewmodel INotifyPropertyChanged लागू है,

public class ViewModel : INotifyPropertyChanged 
{ 
    private bool quickDrawBarPinned; 

    public bool QuickDrawBarPinned 
    { 
     get { return quickDrawBarPinned; } 
     set { quickDrawBarPinned = value; RaisePropertyChanged("QuickDrawBarPinned"); } 
    } 

    public void RaisePropertyChanged(string propertyname) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyname)); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 
+1

मैं सवाल मेरी समाधान/समस्या के बारे में अधिक जानकारी के साथ अपडेट किया है के लिए स्थानीय शैली को दूर करने के लिए है जो इसे लागू करता है। – MikeDub

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