如何从可观察集合设置组合框的ItemsSource

本文关键字:组合 ItemsSource 设置 集合 观察 | 更新日期: 2023-09-27 18:04:46

嗨,我正在做一个使用MVVM-Light框架的WinRT项目。我有一个列表视图,ItemsSource是我的ViewModel上的一个ObservableCollection。这个ObservableCollection中的对象(ClassOne)有一个字段,该字段本身就是一个ObservableCollection。在Listview中,我有ComboBoxes谁的itemsSource我想绑定到第二个ObservableCollection(这是在另一个ObservableCollection字段)。第二个ObservableCollection在我的View的ViewModel中被动态填充。

My Xaml code:

<ListView ItemsSource="{Binding CollectionOne}">
  <ListView.ItemTemplate>
    <DataTemplate>
 <StackPanel>
     <TextBlock Text="{Binding DataCollectionOne}"></TextBlock>                        
     <ComboBox ItemsSource="{Binding Path=CorrespondingViewModel.CollectionOne.CollectionTwo, Source={StaticResource Locator}}">
        <ComboBox.ItemTemplate>
           <DataTemplate>
              <TextBlock Text="{Binding DataCollectionTwo}"/>
           </DataTemplate>
        </ComboBox.ItemTemplate>
      </ComboBox> 
</StackPanel>
    </DataTemplate>
  </ListView.ItemTemplate>
</ListView>

我想做的是:

 <ComboBox ItemsSource="{Binding Path=CorrespondingViewModel.CollectionOne.CollectionTwo, Source={StaticResource Locator}}">    

但是这行不通。

这是我的属性CollectionOne在ViewModel:

private ObservableCollection<ClassOne> _collectionOne;
    public ObservableCollection<ClassOne> CollectionOne
    {
        get { return _collectionOne;; }
        set
        {
            if (_collectionOne; == value)
            {
                return;
            }
            _collectionOne; = value;
            RaisePropertyChanged(() => CollectionOne);
        }
    }

这是ObservableCollection(ClassOne)中的类:

public class ClassOne
{
    public string DataCollectionOne{ get; set; }
    public ObservableCollection<ClassTwo> CollectionTwo{ get; set; }
}

第二类只包含一个String属性。

public class ClassTwo
{
    public string DataCollectionTwo{ get; set; }
}

任何想法?

如何从可观察集合设置组合框的ItemsSource

我在一个测试项目中尝试过,

你可以简单地交换代码

<ComboBox ItemsSource="{Binding Path=CorrespondingViewModel.CollectionOne.CollectionTwo, Source={StaticResource Locator}}"> 

<ComboBox ItemsSource="{Binding CollectionTwo}">

在我的测试项目中运行良好。

希望有帮助!