【发布时间】:2018-02-07 09:48:09
【问题描述】:
我有TabControl,它已经在XAML 上定义了一些TabItems。我需要创建新的TabItems 并添加到它。
如果我使用ItemSource,我会得到一个异常Items collection must be empty before using ItemsSource.
到目前为止,我找到的解决方案是创建那些我已经在 XAML 上定义但在 ViewModel 上以编程方式定义的 TabItems,所以我可以创建我真正需要的其他人,但似乎不是一个好的解决方案。
其他解决方案是将TabControl 添加为属性并使用代码隐藏将其绑定到 ViewModel,我想避免这种情况。
所以,我只是想知道是否有办法只使用 XAML 和 MVVM 来做到这一点。
编辑:
ItemSource 尝试,这是有效的。
XAML:
<TabControl Grid.Row="1"
Grid.Column="0"
VerticalAlignment="Stretch"
BorderThickness="0.5"
BorderBrush="Black"
ItemsSource="{Binding Model.TabItems, Mode=TwoWay}">
<!--<TabControl.Items>
</TabControl.Items>-->
</TabControl>
型号
public ObservableCollection<TabItem> TabItems {get;set;}
虚拟机
TabItem tabItem = new TabItem { Content = new DetailedViewModel((MyObject)inCommandParameter) };
Model.TabItems.Add(tabItem);
【问题讨论】:
-
我认为使用
XAML的唯一方法是设置所有TabItems,但将其可见性设置为false,然后在需要时显示它们。如果你使用ItemSource,那么我建议你检查this. -
是的,
ItemSource可以正常工作,但我有一些修复TabItem和其他我必须动态创建的,对我来说在XAML固定的上创建是有意义的,以及 ViewModel 中的其他人,但似乎我将不得不做“一切或无”的风格。感谢您的回答! -
你能告诉我们
ItemsSource尝试的XAML吗? -
当然@XAMlMAX,但就像我说的那样,它工作正常。问题是当我在
XAML和 VM 中混合使用 TabItems 的定义时 -
你听说过
CompositeCollection和CollectionViewSource吗?