首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何知道所选选项卡的名称?(MVVM)

如何知道所选选项卡的名称?(MVVM)
EN

Stack Overflow用户
提问于 2014-08-21 11:38:02
回答 1查看 1.6K关注 0票数 1

我有一个视图模型,它控制按钮的单击事件,代码是:

代码语言:javascript
运行
复制
ucMantenimientoView miViewPlanificacion = new ucMantenimientoView();
ucMantenimientoViewModel miViewModelPlanificacion = new ucMantenimientoViewModel();
miViewPlanificacion.DataContext = miViewModelPlanificacion;

视图有一个选项卡,使用MVVM,我管理选项卡控件的selectedItem事件的视图模型上的单击事件。

问题是,在创建视图和视图模型时,我需要知道哪个是所选选项卡的名称,但是selectedItem不是激发的,默认情况下,第一个选项卡被选中,所以我不知道如何在创建视图模型时获得所选选项卡的名称。

如果我选择了另一个选项卡,然后选择了第一个选项卡,那么它就能工作了,但是我需要在视图模型的构造函数中使用这些数据。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-21 12:20:17

当使用WPF和MVVM时,我们想知道UI控件的一些值,通常只需将一个视图模型属性绑定到该UI属性。以这种方式,我们总是有需要的数据在我们的指尖,就在视图模型。

如何设置Binding将取决于如何设置XAML。如果数据绑定TabControl.ItemsSource,如下面的示例所示,那么您将得到来自YourTabItemData.HeaderText属性中所有TabItem.Header属性的文本:

代码语言:javascript
运行
复制
<TabControl ItemsSource="{Binding YourTabItemData}">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding HeaderText}" />
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <!-- Content -->
        </DataTemplate>
    </TabControl.ItemTemplate>
</TabControl>

然后,只需将相关类型的对象绑定到TabControl.SelectedItem属性,就可以访问所选TabItemTabControl.Header中的文本

代码语言:javascript
运行
复制
<TabControl ItemsSource="{Binding YourTabItemData}" SelectedItem="{Binding YourItem}">
    ...
</TabControl>

..。

代码语言:javascript
运行
复制
public YourTabItemDataClass YourItem
{
    get { return yourItem; }
    set 
    {
        yourItem = value; 
        NotifyPropertyChanged(); 
        // Selected TabItem has just changed
        string headerOfSelectedTab = yourItem.HeaderText;
    }
}

但是,如果您不是数据绑定到TabControl.ItemsSource属性,那么有一个更简单的解决方案。可以将SelectedValuePath属性设置为从选定的TabItem返回Header值,然后将数据绑定到SelectedValue属性以获得实际值:

代码语言:javascript
运行
复制
<TabControl SelectedValue="{Binding Selected}" SelectedValuePath="Header">
    <TabItem Header="HeaderOne" Name="NameOne"></TabItem>
    <TabItem Header="HeaderTwo" Name="NameTwo"></TabItem>
</TabControl>

您甚至可以使用这两种解决方案的一部分,这取决于什么适合您。

免责声明: 当您说Header时,我只是假设您是指Name,但是如果您真的是指Name,那么如果您只需用Name替换所有出现的Header,那么这个解决方案就会工作得很好。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25425385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档