绑定到单独的 ObservableCollections 的两个 WPF 数据网格有一个奇怪的问题。
这是我的 XAML:
<Grid Name="gridShifts">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Custom:C1DataGrid Name="dgShift1"
HorizontalAlignment="Left" AutoGenerateColumns="False" CanUserAddRows="False" CanUserRemoveRows="False" CanUserReorderColumns="False" Grid.Column="0">
<Custom:C1DataGrid.Columns>
<Custom:DataGridTextColumn Binding="{Binding Path=Type, Mode=TwoWay}" IsReadOnly="True" Header="Work Center"/>
<Custom:DataGridTextColumn Binding="{Binding Path=RegularSkill, Mode=TwoWay }" Header="Personnel"/>
</Custom:C1DataGrid.Columns>
</Custom:C1DataGrid>
<Custom:C1DataGrid Name="dgShift2"
HorizontalAlignment="Left" AutoGenerateColumns="False" CanUserAddRows="False" CanUserRemoveRows="False" CanUserReorderColumns="False" Grid.Column="1">
<Custom:C1DataGrid.Columns>
<Custom:DataGridTextColumn Binding="{Binding Path=Type, Mode=TwoWay}" IsReadOnly="True" Header="Work Center"/>
<Custom:DataGridTextColumn Binding="{Binding Path=RegularSkill, Mode=TwoWay }" Header="Personnel"/>
</Custom:C1DataGrid.Columns>
</Custom:C1DataGrid>
</Grid>
这是我背后的代码:
public partial class MainWindow : Window
{
AMMData.Manpower mp = new AMMData.Manpower();
public MainWindow()
{
InitializeComponent();
gridShifts.DataContext = mp;
dgShift1.ItemsSource = mp.WorkShifts[0].WCList;
dgShift2.ItemsSource = mp.WorkShifts[1].WCList;
}
}
编辑:这是人力资源类:
public enum WCSpecialty
{
Indirect,
Airframes,
AviationLifeSupport,
PeriodicMaintenance,
Electronics,
Electrical_Instruments,
Armaments,
Reconnaissance,
Line,
NA
}
public class Manpower : ComponentDataWrapper
{
#region Private Properties
private ObservableCollection<WCCollection> workShifts = new ObservableCollection<WCCollection>();
#endregion
#region Public Properties
public ObservableCollection<WCCollection> WorkShifts { set { workShifts = value; NotifyPropertyChanged("WorkShifts"); } get { return workShifts; } }
#endregion
public Manpower()
{
Name = "New Work Center Structure";
Description = "New Work Center Personnel Description";
LastChanged = System.DateTime.Now;
var wcc1 = new AMMData.WCCollection();
var wcc2 = new AMMData.WCCollection();
var wc1 = new AMMData.WorkCenter { Type = AMMData.WCSpecialty.Indirect, RegularSkill = 0, MedSkill = 999, HighSkill = 999 };
var wc2 = new AMMData.WorkCenter { Type = AMMData.WCSpecialty.Airframes, RegularSkill = 0, MedSkill = 999, HighSkill = 999 };
var wc3 = new AMMData.WorkCenter { Type = AMMData.WCSpecialty.AviationLifeSupport, RegularSkill = 0, MedSkill = 999, HighSkill = 999 };
var wc4 = new AMMData.WorkCenter { Type = AMMData.WCSpecialty.PeriodicMaintenance, RegularSkill = 0, MedSkill = 999, HighSkill = 999 };
var wc5 = new AMMData.WorkCenter { Type = AMMData.WCSpecialty.Electronics, RegularSkill = 0, MedSkill = 999, HighSkill = 999 };
var wc6 = new AMMData.WorkCenter { Type = AMMData.WCSpecialty.Electrical_Instruments, RegularSkill = 0, MedSkill = 999, HighSkill = 999 };
var wc7 = new AMMData.WorkCenter { Type = AMMData.WCSpecialty.Armaments, RegularSkill = 0, MedSkill = 999, HighSkill = 999 };
var wc8 = new AMMData.WorkCenter { Type = AMMData.WCSpecialty.Reconnaissance, RegularSkill = 0, MedSkill = 999, HighSkill = 999 };
var wc9 = new AMMData.WorkCenter { Type = AMMData.WCSpecialty.Line, RegularSkill = 0, MedSkill = 999, HighSkill = 999 };
var wc10 = new AMMData.WorkCenter { Type = AMMData.WCSpecialty.NA, RegularSkill = 0, MedSkill = 999, HighSkill = 999 };
wcc1.WCList.Add(wc1);
wcc1.WCList.Add(wc2);
wcc1.WCList.Add(wc3);
wcc1.WCList.Add(wc4);
wcc1.WCList.Add(wc5);
wcc1.WCList.Add(wc6);
wcc1.WCList.Add(wc7);
wcc1.WCList.Add(wc8);
wcc1.WCList.Add(wc9);
wcc1.WCList.Add(wc10);
wcc2.WCList.Add(wc1);
wcc2.WCList.Add(wc2);
wcc2.WCList.Add(wc3);
wcc2.WCList.Add(wc4);
wcc2.WCList.Add(wc5);
wcc2.WCList.Add(wc6);
wcc2.WCList.Add(wc7);
wcc2.WCList.Add(wc8);
wcc2.WCList.Add(wc9);
wcc2.WCList.Add(wc10);
WorkShifts.Add(wcc1);
WorkShifts.Add(wcc2);
}
}
public class WCCollection : ComponentDataWrapper
{
private ObservableCollection<WorkCenter> wcList = new ObservableCollection<WorkCenter>();
public ObservableCollection<WorkCenter> WCList { set { wcList = value; NotifyPropertyChanged("WCList"); } get { return wcList; } }
}
public class WorkCenter : ComponentDataWrapper
{
#region private
private WCSpecialty type;
private int regularSkill;
private int highSkill;
private int medSkill;
#endregion
#region public
public WCSpecialty Type { set { type = value; NotifyPropertyChanged("Type"); } get { return type; } }
public int RegularSkill { set { regularSkill = value; NotifyPropertyChanged("RegularSkill"); } get { return regularSkill; } }
public int HighSkill { set { highSkill = value; NotifyPropertyChanged("HighSkill"); } get { return highSkill; } }
public int MedSkill { set { medSkill = value; NotifyPropertyChanged("MedSkill"); } get { return medSkill; } }
public int RegularWholePeople { get { return regularSkill / 10; } }
#endregion
}
我的问题是,当我编辑一个数据网格时,另一个的值也会改变。我已经尝试将两个网格的数据上下文设置为它们各自的 ObservableCollections,但同样的事情发生了。我觉得我现在对 WPF 数据绑定的工作方式比较熟悉,但我完全被这个问题难住了。谢谢你的帮助。