2013-03-20 2 views
1

Привет, я работаю над проектом WinRT с картой MVVM-Light. У меня есть список, в котором ItemsSource является ObservableCollection на моей модели ViewModel. Объекты (ClassOne) в этом ObservableCollection имеют поле, которое является ObservableCollection. В Listview у меня есть ComboBoxes, которые itemsSource, который я хотел бы привязать ко второму ObservableCollection (это поле в другом наблюдаемом списке). Второй ObservableCollection получает динамическое заполнение в ViewModel моего представления.Как установить ItemsSource из combobox из Observablecollection

Мой 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}}">  

Но это не работает.

Это моя собственность 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; } 
} 

Класса только содержит строковое свойство.

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

Любые идеи?

ответ

1

Я попробовал, что в тестовом проекте,

вы можете просто обменять свой код

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

с

<ComboBox ItemsSource="{Binding CollectionTwo}"> 

в тестовом проекте, который работает отлично.

Надеюсь, что это поможет!

+0

Спасибо за советы, Но поле, в котором я нуждаюсь, находится внутри CollectionTwo, который находится внутри CollectionOne. Таким образом, нормальное Binding не работает. – DrZoidberg

+0

Я сделал тестовый проект именно с вашим кодом и обменял только то, что я написал выше: привязка работает для меня, и это свойство находится внутри CollectionTwo или нет? – roqz

+0

Спасибо, первый раз, когда у меня была ошибка в моей модели просмотра, ваш метод действительно работает. – DrZoidberg

Смежные вопросы