我在wpf中有一个tabcontrol,我想在选项卡选择发生变化时向我的viewmodel发送一个触发器。 trig应包括选项卡名称或选项卡索引。
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding Path=TabChangedCommand}"
CommandParameter="{Binding ElementName=TabControl, Path=Name}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
触发器工作正常,但参数始终为null。
答案 0 :(得分:0)
您没有在CommandParameter中传递ElementName。
<TabControl x:Name="mytab">
....
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding Path=TabChangedCommand}"
CommandParameter="{Binding ElementName=mytab}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
....
</TabControl>
做这样的事情
答案 1 :(得分:0)
您可以通过使用MVVM来实现您的目标。
ViewModel中有两个属性,一个属性用于存放所有可用选项卡的集合,另一个属性用于保存当前选定的选项卡。
<强>视图模型强>
public ObservableCollection<ITabViewModel> Tabs { get; private set; }
public ITabViewModel SelectedTab
{
get { return _selectedTab; }
set
{
_selectedTab = value;
RaisePropertyChanged(() => SelectedTab);
}
}
<强> XAML 强>
<TabControl ItemsSource="{Binding Tabs}"
SelectedItem="{Binding SelectedTab}" />
通过上面的设置,ViewModel中的SelectedTab属性会在视图中发生选项卡切换时更新。
或者,如果您只对所选标签的索引感兴趣。在ViewModel中有一个属性来保存选定的选项卡索引并将其绑定到TabControl上的SelectedIndex属性。
<强>视图模型强>
public int SelectedTabIndex
{
get { return _selectedTabIndex; }
set
{
_selectedTabIndex = value;
RaisePropertyChanged(() => SelectedTabIndex);
}
}
<强> XAML 强>
<TabControl ItemsSource="{Binding Tabs}"
SelectedIndex="{Binding SelectedTabIndex}" />