2013-06-28 87 views
8

我試圖創建拉它從視圖模型屬性綁定值的簡單風格數據觸發,你可以看到如下: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

您可能會錯過在屬性更改通知的方法。請確認您的視圖模型是否實現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