2010-07-23 3 views
2

Я новичок в WPF и шаблоне MVVM, поэтому у меня есть некоторые проблемы с моими привязками.RelativeSource FindAncestor без статического ресурса в MVVM?

В подробном представлении клиента я хочу перечислить некоторые статусы в поле со списком.

В моей модели ViewModel клиент находится на корневом уровне, а также список статусов.

При использовании статического ресурса, я могу использовать:

ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type StackPanel}}, Path=DataContext.PartGruppAll}" 

на моем ComboBox, но когда я устанавливаю DataContext из кода позади, он не работает, то, что я делаю неправильно, на мой взгляд, не имеет значения.

С наилучшими пожеланиями, Питер Ларссон

+0

Возможно дать нам код ViewModel, а также. Это может помочь – aqwert

ответ

0

Сво не потому, что вы могли бы иметь орфографическую ошибку

Path=DataContext.PartGruppAll 

мощь должна быть

Path=DataContext.PartGroupAll 
+0

Нет, извините, в этом имени есть часть шведского, правильное имя - PartGruppAll. :) –

+0

Хорошо, не беспокойтесь ... было просто догадка – aqwert

0

О еще одна вещь ...

Если StackPanel имеет такое же визуальное дерево, как и поле со списком t курить вам не нужно, чтобы найти его в переплетах

ItemsSource="{Binding PartGruppAll}" 

Должно работать как DataCoxtext, искать по визуальному дереву.

+0

Нет, это тоже не работает. –

0

Постараюсь дать вам более подробную информацию, viewmodel довольно большой, поэтому я постараюсь сократить его.

Я экземпляр ViewModel в моем коде позади для App.xaml

 protected override void OnStartup(StartupEventArgs e) 
    { 
     base.OnStartup(e); 

     PartWindow pw = new PartWindow(); 


     var PartViewModel = new ViewModel.PartWindowViewModel(); 
     pw.DataContext = PartViewModel; 

     pw.Show(); 
    } 

Тогда в моей странице я связать данные с StackPanel:

<StackPanel DataContext="{Binding Path=PartViewModel}"> 

Я тогда отображения клиента в сетке путем привязки к Customer-property SelectedPart.

<Grid DataContext="{Binding SelectedPart}" Margin="5" Grid.Column="0"> 

Мои ViewModel выглядит так:

ViewModelClass

  • SelectedPart

Имя и другие свойства

  • StatusList

Имя и другие свойства

Ничего на самом деле не сложно, я думаю, что ... Сетка привязана к выбранному клиенту, что это проблема.

2

В вашей привязке попробуйте задать параметр AncestorType для вашего класса вида. Что-то вроде

ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type vw:MyView}}, Path=DataContext.PartGruppAll}" 

где оч.сл. ваше пространство имен, где вы держать вас просматривать и MyView это имя вашего зрения самого класса.

В моем заявлении я объявил оч.сл. как этот

xmlns:vw="clr-namespace:MyApp.View" 

(Вы, наверное, не нужно, что немного, но я включил на всякий случай =)

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