2015-04-12 147 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"> 
相關問題