将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数据绑定

将TextBox多重绑定值绑定到另一个属性

我认为在转换器中执行一些"业务"逻辑不是一个好主意。您应该准备一个更好的视图模型。视图模型应该由具有附加属性的项目和剩余库存数量组成。我不知道你想实现什么,但看起来你可以进行一些计算(在检索数据时),将减去的值存储在NewStock属性中,并将其绑定到TextBox。

除了在检索数据时进行计算外,您还可以添加一个只读的新属性,应用列表对象的两个属性的值。

public int NetStock
{get { return _stockIn - _stockOut; }}

由于绑定已经绑定到您的库存项,并且存在其他值,因此您只需绑定到一个属性并显示净差异(或您需要的任何计算)。然后进行标准的单一绑定到"NetStock"

但是,您注意到该字段应该是可编辑的,但COMPUTED值是如何编辑的。您不能只是将编辑后的值任意应用于其中一个或另一个。因此,您的自定义绑定控件似乎允许编辑输入或输出,这无论如何都会重新计算总网络。在这种情况下,我会更新您的其他属性以执行RaisePropertyChanged("NetStock"),因此当其中一个属性发生更改时,NetStock值也会被刷新。