【问题标题】:Bind TextBox multi bind value to another property将 TextBox 多绑定值绑定到另一个属性
【发布时间】:2016-01-10 16:20:43
【问题描述】:

这是我的实体类

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 数据绑定来做到这一点

【问题讨论】:

  • 对不起!我在编写这个任务时犯了一个错误。在 xaml 文件中 datagrid ItemsSource 应该是 ItemsSource="{Binding ItemCollection}"

标签: c# wpf xaml mvvm


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-11-14
      • 1970-01-01
      • 2018-09-03
      • 1970-01-01
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多