将TextBox多重绑定值绑定到另一个属性
本文关键字:绑定 另一个 属性 TextBox | 更新日期: 2023-09-27 18:29:46
这是我的实体类
public class Item
{
private int _stockIn;
private int _stockOut;
private int _newStock;
public int StockIn
{
get { return _stockIn; }
set
{
_stockIn = value;
OnPropertyChanged("StockIn");
}
}
public int StockOut
{
get { return _stockOut; }
set
{
_stockOut = value;
OnPropertyChanged("StockOut");
}
}
public int NewStock
{
get { return _newStock; }
set
{
_newStock = value;
OnPropertyChanged("NewStock");
}
}
}
这是我的视图模型类
public class ItemViewModel
{
private List<Item> _itemCollection;
public List<Item> ItemCollection
{
get { return _itemCollection; }
set
{
_itemCollection = value;
OnPropertyChanged("ItemCollection");
}
}
}
这是xaml
<DataGrid ItemsSource="{Binding EntityCollection}">
<DataGrid.Columns>
<DataGridTemplateColumn Header="New Stock">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox>
<TextBox.Text>
<MultiBinding Converter="{StaticResource SubstractValuesConverter}">
<Binding Path="StockIn"/>
<Binding Path="StockOut"/>
</MultiBinding>
</TextBox.Text>
</TextBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
我已将上面的ItemCollection列表绑定到数据网格。我在数据网格中有一个TextBox列,该文本框包含转换器,用于减去两个值(StockIn-StockOut)以获得剩余库存量(转换器工作正常)。
此文本框值可以更新。
我想做的是用更新后的文本框值更新数据库。为了做到这一点,我想将此文本框值绑定到NewStock属性。如何使用MVVM数据绑定
我认为在转换器中执行一些"业务"逻辑不是一个好主意。您应该准备一个更好的视图模型。视图模型应该由具有附加属性的项目和剩余库存数量组成。我不知道你想实现什么,但看起来你可以进行一些计算(在检索数据时),将减去的值存储在NewStock属性中,并将其绑定到TextBox。
除了在检索数据时进行计算外,您还可以添加一个只读的新属性,应用列表对象的两个属性的值。
public int NetStock
{get { return _stockIn - _stockOut; }}
由于绑定已经绑定到您的库存项,并且存在其他值,因此您只需绑定到一个属性并显示净差异(或您需要的任何计算)。然后进行标准的单一绑定到"NetStock"
但是,您注意到该字段应该是可编辑的,但COMPUTED值是如何编辑的。您不能只是将编辑后的值任意应用于其中一个或另一个。因此,您的自定义绑定控件似乎允许编辑输入或输出,这无论如何都会重新计算总网络。在这种情况下,我会更新您的其他属性以执行RaisePropertyChanged("NetStock"),因此当其中一个属性发生更改时,NetStock值也会被刷新。