我有一个视图模型,它控制按钮的单击事件,代码是:
ucMantenimientoView miViewPlanificacion = new ucMantenimientoView();
ucMantenimientoViewModel miViewModelPlanificacion = new ucMantenimientoViewModel();
miViewPlanificacion.DataContext = miViewModelPlanificacion;
视图有一个选项卡,使用MVVM,我管理选项卡控件的selectedItem事件的视图模型上的单击事件。
问题是,在创建视图和视图模型时,我需要知道哪个是所选选项卡的名称,但是selectedItem不是激发的,默认情况下,第一个选项卡被选中,所以我不知道如何在创建视图模型时获得所选选项卡的名称。
如果我选择了另一个选项卡,然后选择了第一个选项卡,那么它就能工作了,但是我需要在视图模型的构造函数中使用这些数据。
谢谢。
发布于 2014-08-21 12:20:17
当使用WPF和MVVM时,我们想知道UI控件的一些值,通常只需将一个视图模型属性绑定到该UI属性。以这种方式,我们总是有需要的数据在我们的指尖,就在视图模型。
如何设置Binding
将取决于如何设置XAML。如果数据绑定TabControl.ItemsSource
,如下面的示例所示,那么您将得到来自YourTabItemData.HeaderText
属性中所有TabItem.Header
属性的文本:
<TabControl ItemsSource="{Binding YourTabItemData}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding HeaderText}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<!-- Content -->
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
然后,只需将相关类型的对象绑定到TabControl.SelectedItem
属性,就可以访问所选TabItem
的TabControl.Header
中的文本
<TabControl ItemsSource="{Binding YourTabItemData}" SelectedItem="{Binding YourItem}">
...
</TabControl>
..。
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
属性以获得实际值:
<TabControl SelectedValue="{Binding Selected}" SelectedValuePath="Header">
<TabItem Header="HeaderOne" Name="NameOne"></TabItem>
<TabItem Header="HeaderTwo" Name="NameTwo"></TabItem>
</TabControl>
您甚至可以使用这两种解决方案的一部分,这取决于什么适合您。
免责声明: 当您说
Header
时,我只是假设您是指Name
,但是如果您真的是指Name
,那么如果您只需用Name
替换所有出现的Header
,那么这个解决方案就会工作得很好。
https://stackoverflow.com/questions/25425385
复制相似问题