2014-12-23 2 views
0

У меня есть элемент управления вкладками в моем приложении WPF, он имеет 4 вкладки, каждая вкладка имеет разные datagrid, Я заполняю datagrid на вкладке SelectionChanged. Сетки заполняются должным образом. У меня проблема: при нажатии на datagrid любой вкладки добавляется дополнительная строка со значениями по умолчанию. я отлажена его и обнаружил, что метод SelectionChanged бьет два раза, когда я нажав на DataGrid Это мой 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"); } 
} 

Я пробовал это в своем datagrid

<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 при нажатии на сетке или по крайней мере ударил этот метод только один раз, когда я нажимаю на DataGrid, Его работает нормально, когда Я нажимаю на вкладку. Что я должен сделать для этого?

+1

* У меня возникла проблема в том, что когда я нажимаю на datagrid любой вкладки, он делает все столбцы последней строки сетки равными 0 * ... пожалуйста, объясните вашу проблему лучше (в ваш вопрос, а не здесь). – Sheridan

+0

Спасибо за рассказ, я его обновил –

+0

CanUserAddRows = "false" –

ответ

0

Проблема заключается в известной проблеме при использовании Caliburn.

Caliburn разрешает свойства для целей привязки и использует свойство Injection для их удовлетворения, если они не имеют значения, и тип зарегистрирован в используемом контейнере.

Элемент EXTRA в вашем ItemsSource - это значение, заполняемое некоторыми способами использования Injection Dependency. Возможно, из свойства, связанного с SelectedItem (я не мог получить весь объем вопросов от вопроса).

Работа вокруг:

1) Очистить вы ObservableCollection, прежде чем заселять его. 2) Сделать это ObservableCollection

Смежные вопросы