我想坚持MVVM的设计模式,视图模型不直接接触视图对象,但视图可以接触视图模型。在某些情况下,我允许视图调用视图模型方法。但我最终在视图模型内部调用视图对象。我已经想到了绑定的方法,但仍然没有找到解决这个问题的方法。
<TabControl
TabStripPlacement="Left"
ItemsSource="{Binding Menu}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Header}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<ContentControl Content="{Binding Content}" />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
C#检视模型
public class DashboardViewModel
{
public IndexViewModel()
{
Menu = new ObservableCollection<TabItem>();
Menu.Add(
new TabItem
{
Header = "Campaign",
Content = new RankView()
}
);
Menu.Add( new TabItem { Header = "Configuration" } );
}
public ObservableCollection<TabItem> Menu { get; set; }
}
public sealed class TabItem
{
public string Header { get; set; } = string.Empty;
public UserControl Content { get; set; }
}
1条答案
按热度按时间krcsximq1#
您可以像这样修复此问题
替换
与
因此,
TabHeaderStringToUcConverter
将根据选项卡标题字符串创建适当的UserControl。完整示例:
其中
TabHeaderStringToUcConverter
为最后,在ViewModel中,注解掉
Content = new RankView()
,并从TabItem
类中删除Content
属性。