Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 复合采集&x2B;CollectionContainer:将CollectionContainer.Collection绑定到用作DataTemplates数据类型的ViewModel属性_C#_Wpf_Data Binding_Datatemplate_Compositecollection - Fatal编程技术网

C# 复合采集&x2B;CollectionContainer:将CollectionContainer.Collection绑定到用作DataTemplates数据类型的ViewModel属性

C# 复合采集&x2B;CollectionContainer:将CollectionContainer.Collection绑定到用作DataTemplates数据类型的ViewModel属性,c#,wpf,data-binding,datatemplate,compositecollection,C#,Wpf,Data Binding,Datatemplate,Compositecollection,我没有获得正确的绑定语法来访问MyViewModel的Cats和Dogs属性,该属性位于定义其资源中的CompositeCollection的日期模板中 public class MyViewModel { public ObservableCollection<Cat> Cats { get; private set; } public ObservableCollection<Dog> Dogs { get; private set; } } 公共类

我没有获得正确的绑定语法来访问
MyViewModel
Cats
Dogs
属性,该属性位于定义其资源中的
CompositeCollection
日期模板中

public class MyViewModel
{
    public ObservableCollection<Cat> Cats { get; private set; }
    public ObservableCollection<Dog> Dogs { get; private set; }
}
公共类MyViewModel
{
公共可观测集合猫{get;private set;}
公共可观察收集狗{get;private set;}
}

尝试为您的
列表框
命名,并在绑定中引用其
数据上下文

<ListBox x:Name="myList" ItemsSource="{DynamicResource MyColl}">
   <ListBox.Resources>
      <CompositeCollection x:Key="MyColl">
         <CollectionContainer Collection="{Binding DataContext.Dogs, Source={x:Reference myList}}"/>
         <CollectionContainer Collection="{Binding DataContext.Cats, Source={x:Reference myList}}"/>
      </CompositeCollection>
   </ListBox.Resources>
</ListBox>

由于所述的
CollectionContainer
上的数据绑定问题,我现在使用以下方法:

<ListBox>
  <ListBox.Resources>
    <CollectionViewSource x:Key="DogCollection" Source="{Binding Dogs}"/>
    <CollectionViewSource x:Key="CatCollection" Source="{Binding Cats}"/>
  </ListBox.Resources>
  <ListBox.ItemsSource>
    <CompositeCollection>
      <CollectionContainer Collection="{Binding Source={StaticResource DogCollection}}"/>
      <CollectionContainer Collection="{Binding Source={StaticResource CatCollection}}"/>
    </CompositeCollection>
  </ListBox.ItemsSource>
  <!-- ... -->
</ListBox>


编辑:CompositeCollection
类不是从
FrameworkElement
派生的,因此没有支持数据绑定的
DataContext
属性。只有使用
绑定
提供
源代码
时,它才会起作用。查看此处了解更多信息。

这不起作用。我得到一个异常,
列表框的名称无法解析。我认为这是因为
CompositeCollection
是在
DataTemplate.Resources
中声明的,而
ListBox
是在后面声明的。这只是一个建议。。为什么要在模板资源中收集。。您可以将其移动到列表框资源中吗?如果我将
CompositeCollection
移动到
ListBox.resources
,那么如何将其引用为
ListBox.ItemsSource
?而不是StaticResource use
{DynamicResource MyColl}
如果您将collectin放入列表框资源并使用DynamicSource引用它,它不会给出周期性错误。。。刚刚测试过这个。。。工作很好。。用测试代码更新了答案这对我来说非常有用。但如果你能解释一下为什么需要这样做,那会更有帮助。我不明白:1)为什么我不能以同样的方式声明
CollectionContainer
资源并直接使用它,而不是通过
CollectionViewSource
间接使用它?2)为什么我不能将
CompositeCollection
声明为一个资源,并直接绑定到其中的
CollectionContainer
对象?
CollectionViewSource
有什么特别之处,即使在其他类型不起作用的情况下,它也能在这里工作?