2015-04-12 146 views
0

里面我的课主窗口,我有:如何设置的DataContext在XAML的动态修改的ObservableCollection

public ObservableCollection<ViewModel> VMs .. 

的主窗口中的XAML构建的(它在类的构造函数创建一个空的虚拟机太):

<Window.Resources> 
     <c:MainViewModel x:Key="ViewModelsSource"/> 
</Window.Resources> 

当我点击一个按钮,我添加视图模型对象到的ObservableCollection虚拟机和的ObservableCollection的内容在ListBox所示:

<StackPanel DataContext="{Binding Source={StaticResource ViewModelsSource}}"> 
     <ListBox IsSynchronizedWithCurrentItem="True" 
       ItemsSource="{Binding VMs}" 
       Background="Transparent" 
       HorizontalContentAlignment="Stretch" 
       > ... 

该命令的代码添加为:

void AddListExecute() 
    { 
     VMs.Add(new ViewModel()); 
    } 

的视图模型的构造是:

public class ViewModel : MainViewModel 
{ 
    //Private Members 
    private ObservableCollection<FeeViewModel> _fees; 

    //Properties 
    public ObservableCollection<FeeViewModel> FVMs 
    { 
     get 
     { 
      return _fees; 
     } 
     set 
     { 
      _fees = value; 
     } 
    } 

    //Constructor 
    public ViewModel() 
    { 
     this._fees = new ObservableCollection<FeeViewModel>(); 
    } 
    ... 

这部分工作的罚款。每个视图模型对象包含其他的ObservableCollection:

public ObservableCollection<FeeViewModel> FVMs .. 

我在XAML一个TabControl使用此的ObservableCollection做的东西:

<TabControl 
      IsSynchronizedWithCurrentItem="True" 
      ItemsSource="{Binding FVMs, diag:PresentationTraceSources.TraceLevel=High}" 
      Style="{StaticResource EnabledTabs}" Grid.Column="1" Margin="0,0,10,0"> 
     <TabControl.ItemTemplate>     
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        ... 
       </StackPanel> 
      </DataTemplate> 
     </TabControl.ItemTemplate> 
     <TabControl.ContentTemplate> 
      <DataTemplate> 
      ... 

EnabledTabs是使用在FeeViewModel属性样式:

<Style TargetType="{x:Type TabControl}" x:Key="EnabledTabs"> 
     <Setter Property="IsEnabled" Value="{Binding GotFees}"/> 
    </Style> 

现在我有一个绑定错误,FVMs为null,窗口中没有显示任何内容。如果我恢复到没有ObservableCollection ViewModel对象的先前版本,并将TabControl的DataContext设置为该单个ViewModel,那么一切正常。

如何将TabControl的DataContext设置为动态创建的ViewModel对象?

是否可以在绑定中执行类似VM/FVM的操作? 感谢

+0

是'有史以来FVMs'随时随地初始化? – Clemens

+0

完整性检查:您说您的ViewModel包含一个ObservableCollection FVM,但您显然已经绑定了一些名为FMV的东西。这仅仅是一个错字,还是在你的代码中? – goobering

+0

这将是一个完美的例子,说明为什么你应该使用合理的属性名称。 – Clemens

回答

0

加入的DataContext到TabControl的解决:

<TabControl 
     DataContext="{Binding VMs, Source={StaticResource ViewModelsSource}}" 
     IsSynchronizedWithCurrentItem="True" 
     ItemsSource="{Binding FVMs, diag:PresentationTraceSources.TraceLevel=High}" 
     Style="{StaticResource EnabledTabs}" Grid.Column="1" Margin="0,0,10,0"> 
相关问题