「ContentProperty」属性で識別されるカスタム コントロール内のコレクションの一部であるオブジェクトで依存関係プロパティを使用しようとすると、問題が発生します。わかりました、それはかなり不明確です。これが私のカスタムコントロールのサンプルです:
これが私のカスタムコントロールの基本的な定義です:
[ContentProperty("SmarSearchScopes ")]
public class SmartSearchCc : Control
{
List<SmartSearchScope> SmarSearchScopes {get;set;}
(more code here)
}
SmartSearchScope オブジェクトの基本的な定義は次のとおりです。
public class SmartSearchScope : DependencyObject
{
public static readonly DependencyProperty ViewProperty =DependencyProperty.Register("View", typeof (ICollectionView), typeof (SmartSearchScope),new UIPropertyMetadata(null,OnViewChanged));
public static readonly DependencyProperty FilterColumnsProperty =DependencyProperty.Register("FilterColumns", typeof (IEnumerable<ColumnBase>), typeof (SmartSearchScope),new UIPropertyMetadata(null, OnFilterColumnsChanged));
public ICollectionView View
{
get { return (ICollectionView) GetValue(ViewProperty); }
set { SetValue(ViewProperty, value); }
}
public IEnumerable<ColumnBase> FilterColumns
{
get { return (IEnumerable<ColumnBase>) GetValue(FilterColumnsProperty); }
set { SetValue(FilterColumnsProperty, value); }
}
(more code here)
}
何のために?次のように、XAML を介して SmartSearchScope オブジェクトのコレクションを渡すことができます。
<SmartSearch:SmartSearchCc HorizontalAlignment="Stretch" Grid.Row="0" >
<SmartSearch:SmartSearchScope FilterColumns="{Binding ElementName=CcyPairsConfigBlotter, Path=Columns}" View ="{Binding ElementName=CcyPairsConfigBlotter, Path=ItemsSource}"/>
<SmartSearch:SmartSearchScope FilterColumns="{Binding ElementName=ClientConfigBlotter, Path=Columns}" View ="{Binding ElementName=ClientConfigBlotter, Path=ItemsSource}"/>
</SmartSearch:SmartSearchCc>
「ClientConfigBlotter」と「CcyPairsConfigBlotter」は、「Columns」と「ItemSource」の d プロパティを公開する 2 つの ItemsControl です。
ここでの問題は、2 つの SmartSearchScope オブジェクトがインスタンス化されても、「View」および「FilterColumns」の d プロパティのデータバインディングが行われず、関連付けられたコールバックを通過しないことです。
また、カスタム コントロールの作成時に出力されたエラー メッセージを次に示します。
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=Columns; DataItem=null; target element is 'SmartSearchScope' (HashCode=56862858); target property is 'FilterColumns' (type 'IEnumerable`1')
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=ItemsSource; DataItem=null; target element is 'SmartSearchScope' (HashCode=56862858); target property is 'View' (type 'ICollectionView')
これは、何かが欠けていることは明らかですが、何が見つかりません。
そのコントロールの以前のバージョンでは、これら 2 つの問題のある d プロパティが SmartSearchCc プロパティとすべて正常に機能していたと言わざるを得ません。
ご協力いただきありがとうございます :)
--ブルーノ