C# 数据模板的绑定模型和视图模型
我对WPF比较陌生,我尝试在C# 数据模板的绑定模型和视图模型,c#,wpf,mvvm,C#,Wpf,Mvvm,我对WPF比较陌生,我尝试在列表视图中显示一些数据 我有一个模型类Order,我只想在列表视图上显示它。但我还想显示一些其他计算信息(例如订单中位置的数量) 如何实现对列表视图的数据模板使用OrderViewModel(ViewModel)而不是Order(Model)类 如果你需要更多的信息,请告诉我 提前谢谢你 订单类别 这是我的订单课。它包含一些信息,但不是我想在ListView上显示的所有信息 public class Order { private int number;
列表视图中显示一些数据
我有一个模型类Order
,我只想在列表视图上显示它。但我还想显示一些其他计算信息(例如订单中位置的数量)
如何实现对列表视图的数据模板
使用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; }
}
}
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
}
公共类秩序
{
私有整数;
私人可观测收集位置;
///
///默认构造函数
///
公共秩序()
{
this.positions=新的ObservableCollection();
}
///
///订单号
///
公共整数
{
获取{返回编号;}
设置{number=value;}
}
///
///订单中的位置。
///
公众可观察的集合位置
{
获取{返回位置;}
设置{positions=value;}
}
}
订单视图模型
这个类是我想在ListView上显示的ViewModel
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; }
}
}
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
}
公共类OrderViewModel:ViewModelBase
{
只读私人订单;
#区域构造函数
公共订单视图模型(订单)
{
这个。顺序=顺序;
}
#端域构造函数
#区域顺序属性
公共字符串号
{
获取{return order.Number.ToString();}
}
公众可观察的集合位置
{
收到
{
退货订单。位置;
}
}
#端域顺序属性
#区域表示属性
public int AmountOfPositions//计算值应显示在ListView上。
{
获取{return order.Positions.Count;}
}
#端域表示属性
}
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>
您需要将您的XAML复制到viewmodel
您需要创建最终通过ViewModelBase公开的事件
我想..在properties中添加get以及set和RaisePropertyChange,以便在viewwhat type is AvailableOrders上通知它。@JustinCI我无法绑定属性AmountOffices,因为Model类没有该属性。ListView直接使用模型,而不是ModelView(OrderViewModel)@y0io它的类型是Order。您认为我必须使用列表中的ViewModel吗?当我使用类顺序时,是否有一种方法可以“自动”使用ViewModel?@JustinCI是的,当然,在集合中使用ViewModel:)这是一种常见的方法