【发布时间】:2018-07-11 20:52:28
【问题描述】:
我的应用程序中有一堆Orders,我想在数据网格中显示它们并就地编辑它们的属性。有一个名为Order 的类,其权重属性取决于Item.Weight 和Order.Count。在ObservableCollection<Order> Orders 绑定的数据网格中,我想就地更改行。 City 和 Item 值正在更改,但 Weight 在 Item 或 Count 更改时不会在 UI 中更新。
--MyViewModel
public class Order : INotifyPropertyChanged
{
private int _OrderId;
public int OrderId
{
get { return _OrderId; }
set
{
_OrderId = value;
RaiseProperChanged();
}
}
private City _City;
public City City
{
get { return _City; }
set
{
_City = value;
RaiseProperChanged();
}
}
private Item _Item;
public Item Item
{
get { return _Item; }
set
{
_Item = value;
RaiseProperChanged();
}
}
private int _Count;
public int Count
{
get { return _Count; }
set
{
_Count = value;
RaiseProperChanged();
}
}
private int _Weight;
public int Weight
{
get { return _Weight; }
set
{
_Weight = value;
RaiseProperChanged();
}
}
public static ObservableCollection<Order> GetOrders()
{
var Orders = new ObservableCollection<Order>();
return Orders;
}
public DateTime DateOfOrder { set; get; }
public Order()
{
}
public Order(int _id, City _cty, Item _itm, int _count)
{
OrderId = _id;
_City = _cty;
_Item = _itm;
Count = _count;
Weight = _itm.Weight * _count;
DateOfOrder = DateTime.Now;
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaiseProperChanged([CallerMemberName] string caller = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(caller));
}
}
}
}
--我的观点
<DataGrid x:Name="Orders"
FlowDirection="RightToLeft"
Margin="20,0,20,0"
AutoGenerateColumns="False"
DataGridCell.Selected="DataGrid_GotFocus"
CanUserAddRows="True"
SelectionUnit="FullRow"
Height="250">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding OrderId,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"
Header="ردیف"
FontFamily="{StaticResource BLotus}"
Width="70"
IsReadOnly="True"/>
<DataGridComboBoxColumn SelectedItemBinding="{Binding City,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="Name"
x:Name="citytoadd"
Header="شهر"
Width="150"
/>
<DataGridComboBoxColumn Header="محصول"
x:Name="itemtoadd"
SelectedItemBinding="{Binding Item,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="Name"
Width="350" />
<DataGridTextColumn Binding="{Binding Count,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"
Header="تعداد"
Width="75"
/>
<DataGridTextColumn Binding="{Binding Weight,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"
Header="وزن"
Width="100"
IsReadOnly="True"/>
</DataGrid.Columns>
</DataGrid>
例如:当我在数据网格中编辑一行时,我想更新整个属性,但在这种情况下,我可以更改 Order 的 Item、Count 和 City,但权重不会更新。
【问题讨论】:
-
欢迎来到 SO!你的第一个问题做得很好。您可以尝试更清楚地说明您遇到的问题。也许尝试减少您发布的代码量,因为很难提炼出问题所在。另外,请详细说明在代码中应该根据您的情况切换字段的位置,举例说明您想要实现的目标以及现在发生的情况。
-
非常感谢。我对我的问题进行了一些更改。
-
如果我理解正确,显示的
Weight将是Count * Item.Weight的计算值,用户永远不会直接修改Weight值?我现在假设它并为它写一个答案......
标签: c# .net wpf data-binding datagrid