Я столкнулся с проблемой при попытке использовать свойства зависимостей в объектах, которые являются частью коллекции, внутри пользовательского элемента управления, коллекции, идентифицируемой с помощью атрибута "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)
}
И все это для чего?Возможность передавать коллекцию объектов SmartSearchScope через XAML, например, так:
<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' - это всего лишь два элемента ItemControls, которые предоставляют d-свойство 'Columns' и 'ItemSource'.
Проблема здесь в том, что, хотя мои 2 объекта SmartSearchScope создаются, привязка данных в d-свойствах «View» и «FilterColumns» не выполняется, и я никогда не перебираю связанные с ними обратные вызовы.
Кроме того, вот сообщение об ошибке вывода, которое я получил при создании пользовательского элемента управления.
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 и все это работали просто отлично.
Спасибо за вашу помощь:)
- bruno