裏面我的課主窗口,我有:如何設置的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的操作? 感謝
是'有史以來FVMs'隨時隨地初始化? – Clemens
完整性檢查:您說您的ViewModel包含一個ObservableCollection FVM,但您顯然已經綁定了一些名爲FMV的東西。這僅僅是一個錯字,還是在你的代碼中? –
goobering
這將是一個完美的例子,說明爲什麼你應該使用合理的屬性名稱。 – Clemens