里面我的课主窗口,我有:如何设置的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