2014-12-23 73 views
0

我在我的WPF应用程序中有一个选项卡控件,它有4个选项卡,每个选项卡有不同的数据网格, 我正在填充选项卡SelectionChanged上的数据网格。我有一个问题是,当我点击任何选项卡的数据网格时,会添加具有默认值的额外行。 我调试了一下,发现selectionChanged方法是打两次,当我点击数据网格 这是我的TabControl用的SelectionChangedWPF DataGrid TabControl中的行选择

<TabControl x:Name="tabControl" Grid.Row="1" SelectedValue="{Binding SelectedTab}" Style="{StaticResource Light-TabControlStyle}"> 
        <i:Interaction.Triggers> 
         <i:EventTrigger EventName="SelectionChanged"> 
          <cal:ActionMessage MethodName="LoadTabGrid" cal:View.Model="{Binding Source={StaticResource VMResource}}"> 
          </cal:ActionMessage> 
         </i:EventTrigger> 
        </i:Interaction.Triggers>     
        <TabItem Header="Users"> 
         <Grid > 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="Auto" MinWidth="140"/> 
           <ColumnDefinition/> 
          </Grid.ColumnDefinitions>    
          <DataGrid x:Name="dgotherUsers" ItemsSource="{Binding MyDS}" AutoGenerateColumns="False" 
             Grid.Column="1" > 
           <DataGrid.Columns> 
            <DataGridTextColumn Binding="{Binding UserName}" Header="Sets" Width="*" CanUserSort="False"/> 
            <DataGridTextColumn Binding="{Binding Age}" Header="Sits" Width="*" CanUserSort="False"/> 
            <DataGridTextColumn Binding="{Binding Gender}" Header="Sales" Width="*" CanUserSort="False"/> 
            <DataGridTextColumn Binding="{Binding Salary}" Header="ALP" Width="*" CanUserSort="False"/>          
           </DataGrid.Columns> 
          </DataGrid>        
         </Grid> 
        </TabItem> 
        </TabControl> 

在我的ViewModel

public void LoadTabGrid() 
      { 
       //Updating MyDS 

       } 

这是MyDS

ObservableCollection<UsersInfo> _usersInfo; 
public ObservableCollection<UsersInfo> MyDS 
{ 
    get { return _usersInfo; } 
    set { _usersInfo= value; NotifyOfPropertyChange("MyDS"); } 
} 

我在我的数据网格中试过这个

<i:Interaction.Triggers> 
            <i:EventTrigger EventName="SelectionChanged"> 
             <cal:ActionMessage MethodName="DGSelection" cal:View.Model="{Binding Source={StaticResource VMResource}}"> 

             </cal:ActionMessage> 
            </i:EventTrigger> 
           </i:Interaction.Triggers> 

利用上述方法,DGSelection是打一次,LoadTabGrid被击中过,我需要停下来打LoadTabGrid当我点击数据网格或至少打这个方法只有一次,当我点击数据网格, 其工作正常,当我点击标签。 我应该为此做什么?

+1

*我有一个问题是,当我点击任何选项卡的数据网格,它使网格的最后一行的所有列0 * ...请更好地解释你的问题(在你的问题,不在这里)。 – Sheridan

+0

谢谢你告诉我已经更新了它 –

+0

CanUserAddRows =“假” –

回答

0

问题是使用Caliburn时的一个已知问题。

Caliburn解析了用于绑定目的的属性,并使用Property Injection来满足它们,如果它们没有值并且该类型注册到它使用的容器。

你的ItemsSource中的额外项目是一个值填充一些如何使用依赖注入。 可能来自一个绑定到SelectedItem的属性(我无法从问题中获得所有范围的东西)。

解决方法:

1)清除你的ObservableCollection填充它。 2)使它成为一个ObservableCollection