Joe*_*oel 8 c# wpf design-patterns mvvm mvvm-light
我的WPF Windows包含一个TabControl,它显示不同选项卡上的内容.单击下面的按钮可通过ICommand接口/ Binding执行方法.被调用的方法生成要在第二个选项卡中显示的文本.

如何在不违反MVVM模式的情况下切换到按钮单击时的第二个选项卡?
我试图将TabItem.IsSelected属性绑定到我的ViewModel中的某些内容,但我也想使用其他标签(tab1).
有什么想法吗?
Joe*_*oel 14
我自己发现了它.
关键是双向绑定.单击该按钮时,它将属性设置为DisplayXamlTabtrue.该IsSelected属性绑定到此变量.如果单击另一个选项卡,绑定将DisplayXamlTab属性设置为false.
注意:UpdateSourceTrigger=PropertyChanged也很重要
代码如下:
XAML:
<TabItem Header="XAML" IsSelected="{Binding DisplayXamlTab, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<Grid Background="#FFE5E5E5">
<TextBox x:Name="TxtXamlOutput" IsReadOnly="True" Text="{Binding XamlText, Mode=TwoWay, NotifyOnTargetUpdated=True, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" AcceptsReturn="True" TextWrapping="Wrap" VerticalScrollBarVisibility="Visible"/>
</Grid>
</TabItem>
Run Code Online (Sandbox Code Playgroud)
C#属性:
private bool displayXamlTab;
public bool DisplayXamlTab
{
get { return this.displayXamlTab; }
set
{
this.displayXamlTab = value;
this.RaisePropertyChanged("DisplayXamlTab");
}
}
Run Code Online (Sandbox Code Playgroud)
sim*_*im1 12
如果您要使用MVVM方式,那么您将在后面的代码中创建两个依赖项属性:
ObservableCollection<ItemType> Items;ItemType MySelectedItem;然后,将TabControl ItemsSource属性绑定到Items并将SelectedItem属性绑定到MySelectedItem
<TabControl ItemsSource="{Binding Items}"
SelectedItem="{Binding MySelectedItem, Mode=TwoWay}">
<TabControl.ItemTemplate>
<DataTemplate>
<... here goes the UI to display ItemType ... >
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
Run Code Online (Sandbox Code Playgroud)
如果要更改选定的选项卡,只需更新MySelectedItem依赖属性即可