2017-03-14 11 views
2

私はいくつかのクラスを持っています。それらの中にはColor Propertyがありますが、Color Propertyはありません。私はそれらのために同じListBoxユーザーコントロールを使用しています。そのようなプロパティを持たないクラスのColorPickerを非表示にしたい。私は、DataContextが特定の型の場合、回避策を実行して非表示にすることができますが、バインディングターゲットがただちにnullではないことを確認する方法があるかどうかを知りたいですが、 。オブジェクトにそのプロパティがない場合にバインディングにターゲットがないかどうかを確認する方法

私は提案されたコンバータを使用して(true/falseを返します)、結果は返されませんが、FallbackValueをfalseに設定する@ mm8提案がうまく機能しました。

+4

あなたはtargetプロパティが設定されることを特異的結合のためのFallbackValueを指定することができますsourceプロパティが見つからない場合:https://msdn.microsoft.com/en-us/library/system.windows.data.bindingbase.fallbackvalue(v=vs.110).aspx – mm8

+0

ありがとうございます@ mm8、あなた答えを出すことができる、私はそれをマークする –

+0

良い。それは今、変わった解決策です。作業中のものではないことですが、後でもっとうまくやり直す方法を理解し、解決コードで質問を更新します。 –

答えて

1

結合のために使用ValueConverter、および変換方法では、UnsetValueをチェック:あなたは、その後場合には、異なるテンプレートまたは何を表示するのにDataTriggersを使用することができます

<FrameworkElement Property="{Binding SomeProperty, Converter={StaticResource BindingExists}/> 

public class BindingExists : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value == DependencyProperty.UnsetValue) 
     { 
      // perhaps do something 
      return Binding.DoNothing; 
     } 
     else if (value == null) 
     { 
      // perhaps do something else 
     } 

     return value 
    } 

    // ... 

存在しない値に対してnullを返します。

+0

発生したようです 'System.Windows.Data Error:40:BindingExpression path error: 'オブジェクト' '' Player '(HashCode = 39450669)'に 'Color'プロパティが見つかりません。 BindingExpression:Path = Color; DataItem = 'Player'(HashCode = 39450669);ターゲット要素は 'ListBoxItem'(Name = '');ターゲットプロパティが 'NoTarget'(タイプ 'Object') ' トリガーが適用されていません。 –

関連する問題