我有一个控制按钮点击事件的视图模型,代码为:
ucMantenimientoView miViewPlanificacion = new ucMantenimientoView();
ucMantenimientoViewModel miViewModelPlanificacion = new ucMantenimientoViewModel();
miViewPlanificacion.DataContext = miViewModelPlanificacion;
视图有一个选项卡,使用MVVM Light我在选项卡控件的selectedItem事件的视图模型上管理click事件。
问题是我需要知道在创建视图和视图模型时哪个是所选选项卡的名称,但是selectedItem不是fire,默认情况下是第一个选项卡,所以我不知道知道如何在创建视图模型时获取所选选项卡的名称。
如果我选择另一个选项卡,稍后我选择第一个选项卡,那么它可以工作,但我需要在视图模型的构造函数中使用这些数据。
感谢。
答案 0 :(得分:4)
当使用WPF和MVVM并且我们想知道UI控件的某些值时,通常只是将视图模型属性数据绑定到该UI属性。通过这种方式,我们始终可以在视图模型中轻松获得所需的数据。
您如何设置Binding
取决于您如何设置XAML。如果数据绑定TabControl.ItemsSource
,如下例所示,那么您将拥有TabItem.Header
属性中所有YourTabItemData.HeaderText
属性的文本:
<TabControl ItemsSource="{Binding YourTabItemData}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding HeaderText}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<!-- Content -->
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
然后您可以将相关类型的对象数据绑定到TabControl.SelectedItem
属性,然后您就可以访问所选TabControl.Header
的{{1}}中的文本:< / p>
TabItem
...
<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
返回Header
值,然后将数据绑定到TabItem
属性以获取实际值:
SelectedValue
您甚至可以根据适合自己的方式使用两种解决方案的部分内容。
声明:
我只是假设您在<TabControl SelectedValue="{Binding Selected}" SelectedValuePath="Header"> <TabItem Header="HeaderOne" Name="NameOne"></TabItem> <TabItem Header="HeaderTwo" Name="NameTwo"></TabItem> </TabControl>
说Header
时意味着Name
,但如果您真的想Name
,那么如果您只是替换所有出现的Header
,那么此解决方案也可以正常工作与Name
。