带参数的Wpf tabcontrol trig
Wpf tabcontrol trig with parameter
我在 wpf 中有一个选项卡控件,我想在选项卡选择更改时向我的视图模型发送一个触发器。 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>
触发器工作正常,但参数始终为空。
您没有在 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>
做这样的事情
您可以通过使用 MVVM 实现您正在尝试的目标。
您的 ViewModel 中会有两个属性,一个 属性 用于保存所有可用选项卡的集合,另一个 属性 用于保存当前选定的选项卡。
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 属性。
ViewModel
public int SelectedTabIndex
{
get { return _selectedTabIndex; }
set
{
_selectedTabIndex = value;
RaisePropertyChanged(() => SelectedTabIndex);
}
}
XAML
<TabControl ItemsSource="{Binding Tabs}"
SelectedIndex="{Binding SelectedTabIndex}" />
我在 wpf 中有一个选项卡控件,我想在选项卡选择更改时向我的视图模型发送一个触发器。 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>
触发器工作正常,但参数始终为空。
您没有在 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>
做这样的事情
您可以通过使用 MVVM 实现您正在尝试的目标。
您的 ViewModel 中会有两个属性,一个 属性 用于保存所有可用选项卡的集合,另一个 属性 用于保存当前选定的选项卡。
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 属性。
ViewModel
public int SelectedTabIndex
{
get { return _selectedTabIndex; }
set
{
_selectedTabIndex = value;
RaisePropertyChanged(() => SelectedTabIndex);
}
}
XAML
<TabControl ItemsSource="{Binding Tabs}"
SelectedIndex="{Binding SelectedTabIndex}" />