2012-02-10 101 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.xaml綁定視圖模型的數據模板

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

注:我在ViewModelBase類

並INotifyChanged在MainWindow.xaml。我認爲我的模板是錯誤的.ButtonView在DataTemplate中創建一個新的視圖實例。它沒有綁定在ToolBar Items集合中出現的viewModel。我試圖用相對綁定。仍然不成功。 請幫我一把。

回答

1

剛落,在那裏你創建一個新的虛擬機的線和覆蓋DataContext

this.DataContext = new ButtonViewModel(); 

然後DataContext將繼承(這將是收藏,ButtonVM中的項目)。 (作爲一個側面提示,你似乎同時嘗試先查看和先查看模型,你應該堅持一個,而且視圖應該已經綁定到視圖上的所有相關屬性上-model,以便你只需要創建視圖,就是這樣)

+0

嗨HB你能澄清一點點嗎?抱歉,我對MVVM非常陌生,但仍然很掙扎。我必須在ButtonVM構造函數中刪除綁定嗎?我如何覆蓋DataContext。它會在數據模板中嗎?我想我試圖從VM創建視圖.VM將從xml設置創建。非常感謝 – user1202484 2012-02-10 17:46:17

+0

@ user1202484:Gaah,不,我無法澄清。沒時間。如果這太多了,你有四處看看,關於MVVM教程等有很多問題。 – 2012-02-10 18:23:44

+0

謝謝。我已經看了很多。我覺得我很親密。無論如何,再次感謝。 – user1202484 2012-02-10 18:39:36