2012-02-10 2 views
0
public class ToolBarView : ToolBar 
{ 
     public ToolBarView() 
     { 
      this.DataContext = new ToolBarViewModel(); 
     } 
} 


public ToolBarViewModel: ViewModelBase 
    { 
     public ObservableCollection<ViewModelBase> Items {get;set;} 
     public ToolBarViewModel() 
     { 
      // populate button view models 
     Items.Add(new ButtonViewModel() {Content="Button1"}); 
     Items.Add(new ButtonViewModel() {Content="Button2"}); 
     } 
    } 



public class ButtonView : Button 
    { 
     public ButtonView() 
     { 
      this.DataContext = new ButtonViewModel(); 
     } 
    } 



public class ButtonViewModel : ViewModelBase 
    { 
     public object Content {get;set;}  
    } 

данных В MainWindow.xamlBinding View Model для просмотра в шаблоне

<Window.Resources> 
    <DataTemplate x:Key="buttonTemplate" DataType="{x:Type vm:ButtonViewModel}"> 
     <v:ButtonView Content={Binding Content}/> 
    </DataTemplate> 

<v:ToolBarView ItemsSource="{Binding Items}" 
       ItemTemplate={StaticResource buttonTemplate}/> 

Примечание: Я INotifyChanged в ViewModelBase классе

В MainWindow.xaml. Я думаю, что мой шаблон неправильный.ButtonView в DataTemplate создает новый экземпляр представления. Это не привязывает viewModel, который был забит в коллекции элементов ToolBar. Я пытался использовать Relative Binding. Все еще не удалось. Пожалуйста, помогите мне.

ответ

1

Просто перетащите строку, в которой вы создаете новую виртуальную машину и перезаписать DataContext:

this.DataContext = new ButtonViewModel(); 

Тогда DataContext будет наследоваться (это будет пункт в коллекции, ButtonVM).

(В качестве побочного примечания вы, кажется, пытаетесь сначала просмотреть и сначала просмотреть модель-модель, вы должны придерживаться одного. Кроме того, представление должно, вероятно, уже привязываться ко всем соответствующим свойствам в представлении -модели, так что вам просто нужно создать представление, и это все)

+0

Hi HB Можете ли вы немного пояснить? Извините, я очень новичок в MVVM и все еще борется. Нужно ли удалить привязку в конструкторе ButtonVM? Как я могу перезаписать DataContext. Это будет в datatemplate? Я думаю, что я пытаюсь создать представления из VMs.VM будут созданы из xml-установки. Большое спасибо – user1202484

+0

@ user1202484: Gaah, нет, я не могу уточнить. нет времени. Если это слишком много для вас, посмотрите вокруг, есть много вопросов о учебниках MVVM и т. П. –

+0

Спасибо. Я уже много смотрел. Я думаю, что я довольно близко. Все еще спасибо. – user1202484

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