1

我有一个带有内联 ItemsSource 的 ItemsControl,如下所示(简化):

<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。绑定表达式:路径=已删除;数据项=空;目标元素是'KeyData'(HashCode=4638229);目标属性是“计数”(类型为“Nullable`1”)

我认为这是依赖属性的重点 - 处理这样的情况?有人能指出我误解的部分吗?

4

2 回答 2

1

绑定不知道谁拥有 Count1Count2。提供可能是ElementName指有问题的对象。然后可能会解决它DataContext,例如这个绑定:

="{Binding ElementName=PathBox, Path=DataContext.Count1}"

我发现命名 Xaml 元素(甚至是页面)然后将该命名对象路径到其内部,或者如果它是通过其数据上下文的控件,则可以解决大多数绑定问题。

更新

有时必须x:reference才能访问命名项目。在这种情况下,根据对象使用 x:name 来命名它然后访问它。

="{Binding Source={x:Reference PathBox} , Path=Count1}">
于 2015-04-08T16:15:30.837 回答
0

所以,最终的解决方案。

忽略显而易见的事情,即我最初错过了数据上下文,之后,挑战似乎在于使数组中的项目了解外部 ItemsControl 的数据上下文。

我尝试通过两者来引用ElementName-RelativeSource两者似乎都无法找到。我尝试x:Name在 UserControl 上添加一个,并参考x:ReferenceOmegaMan 在他的回答中建议的使用。

这些都没有达到预期的效果 - 我能找到的唯一可行的解​​决方案是使用"Pipe Object",如本答案后半部分所述。

我已经将数组项重构为一个单独的用户控件,这反过来又简化了绑定。

于 2015-04-10T17:22:53.620 回答