wpf - 单击的选项卡项
问题描述
我有一个问题,我有一个带有 tabcontrol 的 wpf 表单,在 tabcontrol 里面有多个 tabitems。顺便说一句,我正在用 mvvmlight 做 mvvm 设计模式。好的,现在我想将一些数据从绑定到第一个 tabitem 的 viewmodel 传递给另一个绑定到第二个 tabitem 的第二个 viewmodel,但仅在单击第二个 tabitem 时。提前致谢
解决方案
这听起来像一个非常奇怪的要求,如果我错了,请纠正我,但我怀疑你措辞的方式实际上并不是你想要完成的。使用 MVVM 管理选项卡的常用方法是首先为选项卡面板创建视图模型:
public class TabItemViewModel
{
public string Header { get; set; }
// fields for the actual panel items go here
public override string ToString() => this.Header;
}
然后回到你的视图模型中,你创建一个可观察的集合和一个属性来跟踪当前选择了哪个选项卡:
public ObservableCollection<TabItemViewModel> MyItems { get; } = new ObservableCollection<TabItemViewModel>
{
new TabItemViewModel { Header = "Tab Page 1" },
new TabItemViewModel { Header = "Tab Page 2" },
new TabItemViewModel { Header = "Tab Page 3" }
};
private TabItemViewModel _CurrentTab;
public TabItemViewModel CurrentTab
{
get { return this._CurrentTab; }
set
{
if (this._CurrentTab != value)
{
this._CurrentTab = value;
RaisePropertyChanged(() => this.CurrentTab);
}
}
}
}
然后,您的 XAML 将绑定到集合和属性:
<TabControl ItemsSource="{Binding MyItems}" SelectedItem="{Binding CurrentTab}" />
结果:
由于CurrentTab
跟踪当前选择的选项卡,您的视图模型代码可以随时轻松检查是否是用户当前选择的选项卡,因此无需自行处理绑定。由于绑定是双向的,因此视图模型还可以控制当前处于活动状态的选项卡,这在向应用程序添加导航助手时特别方便。
如果您真的想删除绑定,那么很容易向您的视图模型添加一个额外的数据字段,然后在CurrentTab
setter 中设置/清除它。
推荐阅读
- ios - 在 Xamarin.iOS DYLD 中集成时,iOS Objective C Umbrella 框架的代码签名无效,未加载库:App Crash
- java - 在java中通过inputstream读取时向前和向后视频
- python - 多进程更改文件模型,这会引起竞争吗?
- azure - Azure ARM 模板如何让动态 keyvault 应用设置正常工作
- c - 我可以使用字符串作为宏在 C 中传递该宏的值吗?
- javascript - 渲染组件后如何手动更改“选择”的值
- php - PHP从多级标签冒号XML文件DOM PHP中获取数据
- powershell - 如何在powershell中撤销certificatevalidationcallback
- sql - 使用部分索引排除约束 - Postgresql
- node.js - 使用 : 在 json 键中解析 nodejs 中的 json