簡體   English   中英

數據模板的綁定模型和視圖模型

[英]Binding Model and ViewModel for a DataTemplate

我對WPF比較陌生,我嘗試在ListView顯示一些數據。

我有一個Model類Order ,我想簡單地顯示在ListView 但我還想顯示其他一些計算出的信息(例如訂單內的Positions數量)。

如何實現對ListViewDataTemplate使用OrderViewModel (ViewModel)而不是Order (Model)類?

請告訴我您是否需要更多信息。

先感謝您!

訂單類別

這是我的訂單類。 它包含一些信息,但不是我想在ListView上顯示的所有信息。

public class Order
{
    private int number;
    private ObservableCollection<Position> positions;


    /// <summary>
    /// Default Constructor
    /// </summary>
    public Order()
    {
        this.positions = new ObservableCollection<Position>();
    }

    /// <summary>
    /// Order Number
    /// </summary>
    public int Number
    {
        get { return number; }
        set { number = value; }
    }

    /// <summary>
    /// Positions inside the order.
    /// </summary>
    public ObservableCollection<Position> Positions
    {
        get { return positions; }
        set { positions = value; }
    }
}

訂單ViewModel

此類是我要在ListView上顯示的ViewModel。

public class OrderViewModel : ViewModelBase
{
    readonly private Order order;

    #region Constructor

    public OrderViewModel(Order order)
    {
        this.order = order;
    }

    #endregion Constructor

    #region Order Properties

    public string Number
    {
        get { return order.Number.ToString(); }
    }

    public ObservableCollection<Position> Positions
    {
        get
        {
            return order.Positions;
        }
    }

    #endregion Order Properties

    #region Presentation Properties

    public int AmountOfPositions // Calculated value should be shown on the ListView.
    {
        get { return order.Positions.Count; }
    }

    #endregion Presentation Properties
}

ListView的XAML

  <ListView x:Name="orderListView" ItemsSource="{Binding Path=AvailableOrders}" Margin="0,54,0,0" SelectionMode="Single" 
              SelectedItem="{Binding Path=SelectedOrder}" >
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{Binding Number}" />
                    <TextBlock Text="{Binding AmountOfPositions}" // This does not work! />
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
  1. 您需要將XAML 的DataContext設置為viewmodel。
  2. 您需要引發最終通過ViewModelBase公開的屬性更改事件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM