WPF MVVM中的动态TabControl - c#

我几周前开始使用WPF(在C#中),现在我需要一些高级帮助来使用tabcontrol。

首先,我正在使用MVVM(模型视图ViewModel)模式来设计我的应用程序,并且我有一个约束,即试图不要在文件(初始化xaml文件)后面的代码中添加代码。

现在,我的问题是在MainWindow视图(窗口)中动态创建新的tabItem,当单击按钮(例如“新建选项卡”按钮)时,该视图显示详细视图(页面)的实例。

我在网上发现了很多关于Tabitem动态创建的东西,但是经常在文件后面的代码中进行修改。我虽然使用绑定,但是我不知道如何使用绑定到这种东西。

参考方案

MVVM将帮助您。

为您的MainWindow视图创建一个ViewModel。在那里你可以收藏
DetailViewModels。只需在此处使用DetailViewModels的ObservableCollection

在视图中,将ItemsSourceTabControl绑定到该集合。

您的AddTab按钮可以具有命令绑定。该命令可以是ICommand
派生类,在MainWindowViewModel中发布。按下按钮
然后在MainWindow ViewModel中结束,添加另一个DetailViewModel并
以这种方式更新视图。

在此处查看MVVM上的出色视频教程:Jason Dollinger on MVVM

他用Main和Detail ViewModel的示例解释了如何做到这一点。
和命令。

他在视频中开发的源代码可在此处找到:Sourcecode on Lab49

也许对于您来说,创建刚刚使用的ViewModel更容易
通过TabControl。将DataContextTabControl设置为
TabControlViewModel然后。将TabControlViewModel发布到您的
MainWindowViewModel作为公共属性来实现。

除了某些InitializeComponent之外,您的背后代码将为空。

WPF WebBrowser甚至使用ObjectForScripting在单独的线程上锁定UI - javascript

在与WPF Web浏览器控件绑定的ObjectForScripting上调用方法时,网页UI锁定会出现一个奇怪的问题。进一步的研究使我们意识到整个UI(包括WPF应用程序而不是WebBrowser)都已锁定。使用的技术是带有Caliburn.Micro和Autofac的WPF。我在COM可见类上使用方法来推送到Caliburn.Micro提供的事件聚合器。进…

WPF-将窗口大小设置为子用户控件大小 - c#

我有一个选项卡控件,该控件动态地填充有包含各种大小的用户控件的选项卡。打开选项卡后,我希望窗口自动调整大小,使其在活动用户控件下有意义。有一种干净的方法可以做到这一点吗?我正在使用标准的mvvm模式。 参考方案 在Window类上使用SizeToContent属性。<Window x:Class="WpfApplication1.MainWi…

在datagrid(wpf)中选择行索引 - c#

如何在datagrid中选择行索引? 事件SelectionChanged以下代码不起作用: private DataGridRow dgr = new DataGridRow(); private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) { thi…

将GUI导出为XML? - c#

是否有工具采用C#或其他语言设计的GUI,可以采用屏幕布局并将其导出到XML文件,从而最终获得以XML术语表示的屏幕模板?以及获取XML文件并显示结果屏幕? c#参考方案 您是否在WPF中调查过XAML?您提到了C#,所以这似乎与您所要求的直接一致。http://en.wikipedia.org/wiki/XAML另一个好的出发点可能是:http://en.…

为什么要加载PresentationFramework时需要使用“虚拟”代码行? - c#

我有一个非托管应用程序,它的某些用户界面使用WPF程序集。最初,我遇到了如下异常: 未处理System.IO.FileNotFoundException消息:无法加载 文件或程序集'PresentationFramework ...(与Changed framework version results in: Could not load file or a…