Я относительно новичок в WPF, и я пытаюсь показать некоторые данные в ListView
.Binding Model и ViewModel для DataTemplate
У меня есть класс модели Order
, который я хочу просто показать на ListView
. Но я хочу также показать некоторые другие расчетные данные (например, количество Positions
внутри заказа).
Как добиться, чтобы использовать OrderViewModel
(ViewModel), а не Order
(модель) класса для DataTemplate
в ListView
?
Скажите, пожалуйста, если вам нужна дополнительная информация.
Спасибо заранее!
класс Order
Это мой класс заказа. Он содержит некоторую информацию, но не все, что я хочу показать в 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
Этот класс является ViewModel я хочу показать на ListView.
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
}
XAML из ListView
<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>
I think..In свойство Добавить получить, а также набор и RaisePropertyChange уведомить его о представлении –
какого типа AvailableOrders. –
@JustinCI Я не могу связать свойство AmountOfPosition, потому что класс Model не получил это свойство. ListView использует MODEL напрямую, а не ModelView (OrderViewModel) –