У меня есть ItemsControl со встроенным ItemsSource, как показано ниже (упрощенно):
<UserControl>
<ItemsControl>
<ItemsControl.ItemsSource>
<x:Array Type="y:KeyData">
<y:KeyData Name="Name1"/>
<y:KeyData Name="Name2"/>
</x:Array>
</ItemsControl.ItemsSource>
</ItemsControl>
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type DateDifferences:KeyData}">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</UserControl>
Теперь я хочу привязать другое значение к каждому элементу KeyData. Я пробовал следующее:
<UserControl>
<ItemsControl>
<ItemsControl.ItemsSource>
<x:Array Type="y:KeyData">
<y:KeyData Name="Name1" Count="{Binding Count1}"/>
<y:KeyData Name="Name2" Count="{Binding Count2}"/>
</x:Array>
</ItemsControl.ItemsSource>
</ItemsControl>
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type DateDifferences:KeyData}">
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding Count}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</UserControl>
И настройте свойство зависимости, как показано ниже:
internal class KeyData : DependencyObject
{
public string Name { get; set; }
public int? Count
{
get { return (int?)GetValue(CountProperty); }
set { SetValue(CountProperty, value); }
}
public static readonly DependencyProperty CountProperty =
DependencyProperty.Register("Count",
typeof(int?),
typeof(KeyData),
new FrameworkPropertyMetadata());
}
И перейдите в контекст данных:
<UserControlName DataContext="{Binding Container.APresenter}"/>
Однако привязки не могут найти источник...
Ошибка System.Windows.Data: 2: не удается найти управляющий элемент FrameworkElement или FrameworkContentElement для целевого элемента. BindingExpression:Путь=Удалено; Элемент данных = ноль; целевой элемент — «KeyData» (HashCode=4638229); целевое свойство — «Count» (тип «Nullable`1»)
Я думал, что это и есть смысл свойства зависимостей — обрабатывать такие случаи? Кто-нибудь может указать на часть, которую я неправильно понял?
Count1
иCount2
? Вам нужно будет установить Source или RelativeSource или ElementName двух привязок, так как DataContext не наследуется в массиве. - person Clemens   schedule 08.04.2015