如何从Observablecollection设置组合框的ItemsSource

时间:2013-03-20 12:44:40

标签: c# combobox mvvm-light winrt-xaml observablecollection

您好我正在使用MVVM-Light框架开发WinRT项目。 我有一个listview,其中ItemsSource是我的ViewModel上的ObservableCollection。 此ObservableCollection中的对象(ClassOne)具有一个ObservableCollection本身的字段。 在Listview中,我有ComboBox,谁的itemsSource我想绑定到第二个ObservableCollection(这是另一个observablecollection中的字段)。 第二个ObservableCollection在我的View的ViewModel中动态填充。

我的Xaml代码:

<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}}">    

但这不起作用。

这是我在ViewModel上的CollectionOne属性:

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; }
}

第二类只包含一个字符串属性。

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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我在测试项目中试过了,

您只需交换代码

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

<ComboBox ItemsSource="{Binding CollectionTwo}">

在我的测试项目中工作正常。

希望有所帮助!