我一直在尝试在WPF MVVM项目中创建一个可编辑的
目标是收集具有不确定数量部门的商店的部门总数。我尝试在下面进行演示。
很不幸,在使用XAML的索引器进行尝试时,我发现它不能帮助我处理动态列,并且我找不到其他绑定方式。
更多信息:上面的数据网格(和数据演示)属于shop1,我想在一个窗口/用户控件中收集其部门的月收入。每个商店在整个月份内都有相同数量的部门,但这并不意味着每个部门每天都应该有收入,可能为零。该部门可能在任何一天关闭,因此当天没有产生任何收入。对于同一月份,Shop2可能拥有完全不同的部门,因此我将不会在同一屏幕上处理所有商店。
编辑1:添加了关于情景的更多信息。
DataGrid
,其中包含动态列。这些动态列将是相同的类型,即:decimal
。目标是收集具有不确定数量部门的商店的部门总数。我尝试在下面进行演示。
Day Dept1 Dept2 Dept3... TotalOfDepartments CashTotal CreditTotal
=====================================================================
1 100 200 50 350 50 300
2 75 100 0 175 25 150
因此,有许多带有不确定部门的商店,我的目标是收集月份
我想使Department、CashTotal和CreditTotal列可编辑。我尝试过几种方法,例如:
这是我从最后一种方法中尝试的最后一次。如下所示:
模型:
public class DailyRevenues
{
public int ShopId { get; set; }
public int Day { get; set; }
public ObservableCollection<Department> DepartmentList { get; set; }
public DailyRevenues()
{
this.DepartmentList = new ObservableCollection<Department>();
}
}
public class Department
{
public string Name { get; set; }
private decimal total;
public decimal Total
{
get { return total; }
set { total = value; }
}
}
视图模型:
public class DataItemViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public DataItemViewModel()
{
this.MonthlyRevenues = new ObservableCollection<DailyRevenues>();
var d1 = new DailyRevenues() { ShopId = 1, Day = 1 };
d1.DepartmentList.Add(new Department() { Name = "Deapartment1", Total = 100 });
d1.DepartmentList.Add(new Department() { Name = "Deapartment2", Total = 200 });
var d2 = new DailyRevenues() { ShopId = 1, Day = 2 };
d2.DepartmentList.Add(new Department() { Name = "Deapartment1", Total = 75 });
d2.DepartmentList.Add(new Department() { Name = "Deapartment2", Total = 150 });
d2.DepartmentList.Add(new Department() { Name = "Deapartment3", Total = 100 });
this.MonthlyRevenues.Add(d1);
this.MonthlyRevenues.Add(d2);
}
private ObservableCollection<DailyRevenues> monthlyRevenues;
public ObservableCollection<DailyRevenues> MonthlyRevenues
{
get { return monthlyRevenues; }
set
{
if (monthlyRevenues != value)
{
monthlyRevenues = value;
OnPropertyChanged(nameof(MonthlyRevenues));
}
}
}
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
而 XAML:
<DataGrid ItemsSource="{Binding MonthlyRevenues}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Header="Day" Binding="{Binding Path=Day}" />
<DataGridTextColumn Header="{Binding Path=MonthlyRevenues[0].DepartmentList[0].Name}" Binding="{Binding Path=DepartmentList[0].Total, Mode=TwoWay}" />
<DataGridTextColumn Header="{Binding Path=DepartmentList[1].Name}" Binding="{Binding Path=DepartmentList[1].Total, Mode=TwoWay}" />
<DataGridTextColumn Header="Department Total"/>
<DataGridTextColumn Header="Cash Total" />
<DataGridTextColumn Header="Credit Total" />
</DataGrid.Columns>
</DataGrid>
很不幸,在使用XAML的索引器进行尝试时,我发现它不能帮助我处理动态列,并且我找不到其他绑定方式。
更多信息:上面的数据网格(和数据演示)属于shop1,我想在一个窗口/用户控件中收集其部门的月收入。每个商店在整个月份内都有相同数量的部门,但这并不意味着每个部门每天都应该有收入,可能为零。该部门可能在任何一天关闭,因此当天没有产生任何收入。对于同一月份,Shop2可能拥有完全不同的部门,因此我将不会在同一屏幕上处理所有商店。
编辑1:添加了关于情景的更多信息。