如何显示数据绑定或重写ToString()C#WPF XAML

玉莲Linev

我有这个Order类,并且正在使用MVVM:

namespace drinksMVVM.Models
{
    public class Order : INotifyPropertyChanged
    {
    private Item _OrderItem;
    private ObservableCollection<Item> _Supplements;
    private double _OrderPrice;

    public Item OrderItem
    {
        get
        {
            return _OrderItem;
        }
        set
        {
            _OrderItem = value;
            OnPropertyChanged("OrderItem");
            _OrderPrice += _OrderItem.Price;
        }
    }

    public ObservableCollection<Item> Supplements
    {
        get
        {
            return _Supplements;
        }
        set
        {
            _Supplements = value;
            OnPropertyChanged("Supplements");
            foreach(var supplement in _Supplements)
            {
                _OrderPrice += supplement.Price;
            }
        }
    }

    public double OrderPrice
    {
        get
        {
            return _OrderPrice;
        }
        set
        {
            _OrderPrice = value;
            OnPropertyChanged("Price");
        }
    }

    public Order()
    {

    }

    public Order(Item item, ObservableCollection<Item> items)
    {
        _OrderItem = item;
        _Supplements = items;
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public void OnPropertyChanged(string property)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
    }
}
}

它包含Item类型的对象(属性名称和价格)和Item类型的ObservableCollection。Order对象当然包含一个Item,它是作为订单的单个食品/饮料,但是可以包含Item和ObservableCollection,它是具有其他补充的食品/饮料。

一个简单的示例:我订购了加糖和奶油的咖啡,并希望显示如下内容:咖啡(OrderItem)糖+奶油(补充)1,50(OrderPrice)在这种情况下,布局无所谓

我的问题是如何在我的视图中显示数据。我有两个不知道如何继续的想法。

  1. 具有文本块的DataTemplate,每个文本块都绑定到Order类的属性,但不知道如何显示ObservableCollection中的每个项目名称。

    <DataTemplate x:Key="OrderTemplate">
        <StackPanel Orientation="Vertical">
            <TextBlock x:Name="OrderName" Text="{Binding OrderItem.Name}"/>
            <TextBlock x:Name="OrderSupplements" 
             Text="{Binding Supplements[0].Name}"/> ///Can't solve this
             binding 
            <TextBlock x:Name="OrderPrce" Text="{Binding OrderPrice}"/>
        </StackPanel>
    </DataTemplate>
    

2.重写Order类的ToString()方法,以便在单个文本块中显示所有数据,但也找不到解决方案,以显示所有补品名称。

    public override string ToString()
    {
        return OrderItem.Name + " " +/*every single supplement name*/+" "
        +OrderPrice.ToString();
    }

    <DataTemplate x:Key="OrderTemplate1">
        <StackPanel Orientation="Vertical">
            <TextBlock x:Name="test" Text="{Binding}"/>
        </StackPanel>
    </DataTemplate>
约翰·施特里滕贝格

就选项2而言...

public override string ToString()
{
    string orderStr = string.Empty;
    orderStr += _OrderItem.Name + " ";

    foreach(Item supplement in Supplements)
    {
        orderStr += supplement.Name + " ";
    }

    orderStr += OrderPrice.ToString();
    return orderStr;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章