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

时间:2016-01-10 16:20:44

标签: c# wpf xaml mvvm

这是我的实体类

items[i] = tempList[i]

这是我的视图模型类

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");
        }
    }
}

这是xaml

public class ItemViewModel
{
    private List<Item> _itemCollection;

    public List<Item> ItemCollection
    {
        get { return _itemCollection; }
        set
        {
            _itemCollection = value;
            OnPropertyChanged("ItemCollection");
        }
    }
}

我已将 ItemCollection 列表绑定到数据网格。我在数据网格中有一个TextBox列,该文本框包含转换器,用于减去两个值(StockIn - StockOut)以获得剩余库存数量(转换器工作正常)。

此文本框值可以更新。

我想要做的是我想用更新的文本框值更新数据库。为此,我想将此文本框值绑定到 NewStock 属性。我怎样才能使用MVVM数据绑定

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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

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