我的WPF应用程序中有一个选项卡控件,它有4个选项卡,每个选项卡都有不同的数据网格, 我在Tab SelectionChanged上填充数据网格。网格填充正确。我遇到的一个问题是,当我点击任何标签的datagrid时,会添加一个带有默认值的额外行。 我调试它,发现当我点击datagrid时,Selectionchanged方法击中了两次 这是我的带有selectionchanged的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也是命中,我需要在点击datagrid时停止点击LoadTabGrid,或者当我点击datagrid时,只需点击一次此方法, 当我点击标签时它工作正常。 我该怎么做?
答案 0 :(得分:0)
使用Caliburn时,问题是一个已知问题。
Caliburn为绑定目的解析属性,如果它们没有值并且类型已注册到它使用的容器,则使用Property Injection来满足它们。
ItemsSource中的EXTRA项是填充了一些如何使用依赖注入的值。 可能来自绑定到SelectedItem的属性(我无法从问题中获得所有范围的东西)。
解决方法:
1)在填充之前清除ObservableCollection。 2)使其成为ObservableCollection