2010-03-17 43 views
1

如果綁定項屬性ID等於我的自定義控件中的屬性,我想激活一個觸發器。如何觸發WPF中的綁定項?

但我不能在我的觸發器中使用綁定!

我該怎麼做?

回答

3

這應該工作:

<DataTrigger 
    Value="True"> 

    <DataTrigger.Binding> 
     <MultiBinding 
      Converter="{x:Static local:EqualityConverter.Instance}"> 
      <Binding 
       Path="BoundProperty" /> 
      <Binding 
       ElementName="MockCustomControl" 
       Path="Text" /> 
     </MultiBinding> 
    </DataTrigger.Binding> 

    <DataTrigger.Setters> 
     <Setter 
      TargetName=" ... " 
      Property=" ... " 
      Value=" ... " /> 

     ... 
     ... 

    </DataTrigger.Setters> 

</DataTrigger> 

和轉換器可能與此類似:

public class EqualityConverter : IMultiValueConverter 
{ 
    public static readonly EqualityConverter Instance = new EqualityConverter(); 

    #region IMultiValueConverter Members 

    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (values == null || values.Length == 0) return false; 

     for (int i = 1; i < values.Length; i++) 
      if (!values[i].Equals(values[0])) return false; 

     return true; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 

請注意,我用一個通用的convrter可以比比n個值,但你可以根據您的需要使用簡單的一個。

希望這會有所幫助。

+0

我始終將值[1]設置爲DependencyProperty.UnsetValue綁定到屬性。我嘗試了很多變化,但總是得到UnsetValue!建議? – ErikTJ 2010-03-18 13:27:07

+0

在我身邊,它的工作完美!看起來你的綁定存在一些問題。你的控件(我已經命名爲'MockCustomControl')在視覺樹中位於哪裏?也許你可以上傳你的項目(像http://SkyDrive.com),以便我可以進一步幫助你:) – mg007 2010-03-19 04:53:45

+0

得到它的工作! – ErikTJ 2010-03-23 11:26:14

0

DataTrigger的value屬性沒有綁定?

 

    <DataTrigger Binding="{Binding BoundPropertyId}" Value="{Binding ElementName=Mine, Path=Property}" /> 
 

如果不工作,你可能需要鉤住事件和自己處理它的代碼隱藏。

+0

我無法在Value-tag中使用綁定 – ErikTJ 2010-03-17 20:18:40

+0

您無法設置Binding on Value,因爲它不是DependencyProperty。然而,正如@apandit所說,DataTrigger就是您要找的東西! – mg007 2010-03-18 05:08:53

相關問題