将视图模型绑定到数据模板中的视图

时间:2012-02-10 17:10:10

标签: wpf datatemplate

   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中。我认为我的模板是错误的.DataTemplate中的BututView正在创建一个新的视图实例。它不绑定在ToolBar Items集合中弹出的viewModel。我尝试使用相对绑定。仍然没有成功。 请帮帮我。

1 个答案:

答案 0 :(得分:1)

只需删除创建新VM的行并覆盖DataContext

this.DataContext = new ButtonViewModel();

然后DataContext将被继承(它将是集合中的项目,ButtonVM)。

(作为旁注,你似乎首先尝试了view-first和view-model-first,你应该坚持使用一个。此外,视图应该已经绑定到视图上的所有相关属性 - 模型,这样你只需要创建视图就可以了。)