2013-03-20 121 views
0

我做了一个基于嵌套选项卡的项目。 嵌套选项卡是相同的viemModel和相同的用户界面的不同实例。 当我在标签之间切换时,他在组合标签中显示的组合框取决于失去焦点的标签。切换选项卡后WPF组合框选择更改

我添加了viewmodels和我的测试项目的视图。 预先感谢您的帮助

主窗口

<Window.Resources> 

    <DataTemplate DataType="{x:Type local:IntermediateViewModel}"> 
     <local:IntermediateView /> 
    </DataTemplate> 

    <DataTemplate x:Key="HeaderedTabItemTemplate"> 
     <Grid> 
      <ContentPresenter 
         Content="{Binding Path=Header, UpdateSourceTrigger=PropertyChanged}" 
         VerticalAlignment="Center" > 
      </ContentPresenter> 
     </Grid> 
    </DataTemplate> 

    <Style x:Key="SimpleTabItemStyle" TargetType="TabItem"> 
     <Setter Property="Foreground" Value="White"/> 
     <Setter Property="FontWeight" Value="Bold"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TabItem}"> 
        <Grid> 
         <Border Name="Border" BorderThickness="1" BorderBrush="#555959"> 
          <ContentPresenter x:Name="ContentSite" VerticalAlignment="Center" HorizontalAlignment="Center" 
           ContentSource="Header" Margin="12,2,12,2" RecognizesAccessKey="True" Height ="40" MinWidth ="90"/> 
         </Border> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsSelected" Value="True"> 
          <Setter TargetName="Border" Property="Background" Value="#555959" /> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

    <DataTemplate x:Key="DefaultTabControlTemplate"> 
     <TabControl IsSynchronizedWithCurrentItem="True" 
         BorderThickness="0" 
         ItemsSource="{Binding}" 
         ItemTemplate="{StaticResource HeaderedTabItemTemplate}" 
         ItemContainerStyle="{StaticResource SimpleTabItemStyle}" 
         SelectionChanged="TabControl_SelectionChanged" 
         /> 
    </DataTemplate> 


    <!----> 


</Window.Resources> 

<Grid MinHeight="200" MinWidth="300"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="260*" /> 
     <RowDefinition Height="51*" /> 
    </Grid.RowDefinitions> 
    <Border > 
     <ContentControl 
      Content="{Binding Path=Workspaces}" 
      ContentTemplate="{DynamicResource DefaultTabControlTemplate}" 
      /> 
    </Border> 
    <Button Grid.Row="1" Content="Add" Command="{Binding AddCommand}"/> 
</Grid> 

视图模型(创建一个不同的istance每次)

class MainWindowViewModel : WorkspacesViewModel<IntermediateViewModel> 
{ 
    public MainWindowViewModel() 
    { 
     this.WorkspacesView.CurrentChanged += new EventHandler(WorkspacesView_CurrentChanged); 
    } 

    void WorkspacesView_CurrentChanged(object sender, EventArgs e) 
    { 
    } 

    RelayCommand myVar = null; 
    public ICommand AddCommand 
    { 
     get 
     { 
      return myVar ?? (myVar = new RelayCommand(param => 
      { 
       SetWindow(new IntermediateViewModel("AA" + this.Workspaces.Count)); 
      })); 
     } 
    } 

第一级标签

<UserControl.Resources> 

    <DataTemplate DataType="{x:Type local:ClassViewModel}"> 
     <local:ClassView /> 
    </DataTemplate> 
</UserControl.Resources> 

<Border> 
    <ContentControl Content="{Binding Path=CurrentWorkspace, Mode=OneWay}" Loaded="ContentControl_Loaded" DataContextChanged="ContentControl_DataContextChanged" IsVisibleChanged="ContentControl_IsVisibleChanged" LayoutUpdated="ContentControl_LayoutUpdated" TargetUpdated="ContentControl_TargetUpdated" Unloaded="ContentControl_Unloaded" /> 
</Border> 

一级视图模型

class IntermediateViewModel:WorkspacesViewModel { {0}公共字符串标题{get;组; }

public IntermediateViewModel(string header) 
    { 
     Header = header; 
     SetWindow(new ClassViewModel(header)); 
    } 
} 

嵌套的标签

<UserControl.Resources> 
    <CollectionViewSource x:Key="StatusView" Source="{Binding Path=StatusList}"/> 
</UserControl.Resources> 
<Grid> 
    <ComboBox Name="_spl2Status" ItemsSource="{Binding Source={StaticResource StatusView}}" 
     SelectedValue="{Binding Path=MyProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
     SelectedValuePath="FL_TYPE" 
     DisplayMemberPath="ID_TYPE" Margin="76,12,0,0" Height="40" VerticalAlignment="Top" HorizontalAlignment="Left" Width="146" 
       DataContextChanged="_spl2Status_DataContextChanged" 
       IsVisibleChanged="_spl2Status_IsVisibleChanged" 
       Loaded="_spl2Status_Loaded" 
       SelectionChanged="_spl2Status_SelectionChanged" 
       > 
    </ComboBox> 
</Grid> 

嵌套式标签视图模型

public enum myTypes 
{ 
    tipo0 = 0, 
    tipo1 = 1, 
    tipo2 = 2, 
} 

class ClassViewModel : WorkspaceViewModel 
{ 
    public ClassViewModel(string name) 
    { 
     Name = name; 
    } 

    public string Name { get; set; } 

    private List<IntEnumType> _statusList = null; 
    public List<IntEnumType> StatusList 
    { 
     get 
     { 
      if (_statusList == null) 
       _statusList = new List<IntEnumType>() 
       { 
        new IntEnumType((int)myTypes.tipo0, myTypes.tipo0.ToString()), 
        new IntEnumType((int)myTypes.tipo1, myTypes.tipo1.ToString()), 
        new IntEnumType((int)myTypes.tipo2, myTypes.tipo2.ToString()), 
       }; 
      return _statusList; 
     } 
    } 

    private int myVar = 1; 
    public int MyProperty 
    { 
     get 
     { 
      return myVar; 
     } 
     set 
     { 
      if (myVar != value) 
      { 
       myVar = value; 
       OnPropertyChanged(() => MyProperty); 
      } 
     } 
    } 
} 

public class TabItemStyleSelector : StyleSelector 
{ 
    public Style MainTabItem { get; set; } 
    public Style ChildrenTabItem { get; set; } 
    public Style SpecificationTabItem { get; set; } 

    public override Style SelectStyle(object item, DependencyObject container) 
    { 
     //if (item is IHome) 
     // return MainTabItem; 
     //else if (item is SpecificationItemViewModel) 
     // return SpecificationTabItem; 
     //else 
      return ChildrenTabItem; 
    } 
} 

回答

1

的代码是一个有点难以完全效仿,但我猜测,这个问题是有只有你的ClassViewModel的一个实例,这是存储组合框的选择{Binding Path=MyProperty,所以无论存储在MyProperty将反映在所有我无论他们居住在哪里,组合框的物质。

+0

不,有2个viewmodels ..如果有一个文本框有两个不同的值它的工作原理,问题就在于组合框 – andrea 2013-03-20 18:49:24

+0

然后请发布第二个viewmodel。都绑定到相同的SelectedValue或SelectedIndex将解释此行为。 – Paparazzi 2013-03-20 18:53:21

+0

也添加了其他视图模型 – andrea 2013-03-20 18:54:45

-2

问题出在您的加载事件处理程序中。

当您切换选项卡时,卸载一个选项卡并加载一个新选项卡。我想你的MyComboBox.SelectedIndex_spl2Status_Loaded

相关问题