C# 如何知道所选选项卡的名称?(MVVM)
我有一个控制按钮点击事件的视图模型,代码是:C# 如何知道所选选项卡的名称?(MVVM),c#,wpf,mvvm,mvvm-light,C#,Wpf,Mvvm,Mvvm Light,我有一个控制按钮点击事件的视图模型,代码是: ucMantenimientoView miViewPlanificacion = new ucMantenimientoView(); ucMantenimientoViewModel miViewModelPlanificacion = new ucMantenimientoViewModel(); miViewPlanificacion.DataContext = miViewModelPlanificacion; 视图有一个选项卡,我使用M
ucMantenimientoView miViewPlanificacion = new ucMantenimientoView();
ucMantenimientoViewModel miViewModelPlanificacion = new ucMantenimientoViewModel();
miViewPlanificacion.DataContext = miViewModelPlanificacion;
视图有一个选项卡,我使用MVVM Light管理选项卡控件selectedItem事件视图模型上的click事件
问题是,我需要知道在创建视图和视图模型时所选选项卡的名称,但selectedItem不是fire,默认情况下是在第一个选项卡上选择的,因此我不知道如何在创建视图模型时获取所选选项卡的名称
如果我选择了另一个选项卡,然后又选择了第一个选项卡,那么它就可以工作了,但是我需要在视图模型的构造函数中使用这些数据
谢谢。当使用WPF和MVVM时,我们想知道UI控件的一些值,通常只需将视图模型属性数据绑定到该UI属性。通过这种方式,我们始终可以在视图模型中找到所需的数据 如何设置
绑定将取决于如何设置XAML。如果像下面的示例那样对选项卡Control.ItemsSource
进行数据绑定,那么您将拥有选项卡Item.Header
属性中所有选项卡ItemData.HeaderText
属性的文本:
<TabControl ItemsSource="{Binding YourTabItemData}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding HeaderText}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<!-- Content -->
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
但是,如果您没有将数据绑定到TabControl.ItemsSource
属性,那么有一个更简单的解决方案。您可以设置SelectedValuePath
属性,从所选TabItem
返回标题
值,然后将数据绑定到SelectedValue
属性以获取实际值:
<TabControl SelectedValue="{Binding Selected}" SelectedValuePath="Header">
<TabItem Header="HeaderOne" Name="NameOne"></TabItem>
<TabItem Header="HeaderTwo" Name="NameTwo"></TabItem>
</TabControl>
您甚至可以根据您的需要使用这两种解决方案的一部分
免责声明:
当你说Name
时,我只是假设你指的是Header
,但是如果你真的指的是Name
,那么如果你简单地用Name
替换所有出现的Header
,这个解决方案也同样有效
当使用WPF和MVVM并且我们想知道UI控件的一些值时,通常只需将视图模型属性数据绑定到该UI属性。通过这种方式,我们始终可以在视图模型中找到所需的数据
如何设置绑定将取决于如何设置XAML。如果像下面的示例那样对选项卡Control.ItemsSource
进行数据绑定,那么您将拥有选项卡Item.Header
属性中所有选项卡ItemData.HeaderText
属性的文本:
<TabControl ItemsSource="{Binding YourTabItemData}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding HeaderText}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<!-- Content -->
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
但是,如果您没有将数据绑定到TabControl.ItemsSource
属性,那么有一个更简单的解决方案。您可以设置SelectedValuePath
属性,从所选TabItem
返回标题
值,然后将数据绑定到SelectedValue
属性以获取实际值:
<TabControl SelectedValue="{Binding Selected}" SelectedValuePath="Header">
<TabItem Header="HeaderOne" Name="NameOne"></TabItem>
<TabItem Header="HeaderTwo" Name="NameTwo"></TabItem>
</TabControl>
您甚至可以根据您的需要使用这两种解决方案的一部分
免责声明:
当你说Name
时,我只是假设你指的是Header
,但是如果你真的指的是Name
,那么如果你简单地用Name
替换所有出现的Header
,这个解决方案也同样有效
您是否尝试过绑定TabControl
的SelectedItem
属性(假设它有一个)而不是事件,并观察VM中的更改?我使用的是Telerik control suite,它允许您选择一个SelectEditImpression
,您可以指向绑定对象上的属性-我使用选项卡项的标记
属性来存储选项卡名称。您还可以绑定SelectedIndex
属性-可能不太明确,但如果您可以保证选项卡顺序,这是一个选项。如果您无法强制手动触发事件或使用聚合器将数据发送到VMWell,我会在miViewPlanification.MyTabCOntrol.SelectedItem选项中考虑,但视图的属性不可用。而不是事件,您是否尝试过绑定TabControl
的SelectedItem
属性(假设它有一个属性),并查看VM中的更改?我使用的是Telerik control suite,它允许您选择一个SelectEditImpression
,您可以指向绑定对象上的属性-我使用选项卡项的标记
属性来存储选项卡名称。您还可以绑定SelectedIndex
属性-可能不太明确,但如果您可以保证选项卡顺序,这是一个选项。如果您无法强制手动触发事件,或者使用聚合器将数据发送到VMWell,我在MiviewPlanification.MyTabCOntrol.SelectedItem的选项中考虑过,但该视图的属性不可用。是的,我的意思是“name”而不是“header”,但是是一样的,谢谢。哈哈。。。是的,对不起,我刚才在回答一半的时候想到了。是的,我的意思是“名字”而不是“标题”,但是是一样的,谢谢。哈哈。。。是的,对不起,我刚刚在回答一半的时候想到了这一点。