【发布时间】:2015-06-11 17:58:14
【问题描述】:
我正在尝试显示有关汽车列表的信息。该列表存储在 CarLibrary 中,我无法获取显示在相应标题下方的信息。
这是我的 xaml:
<TabItem Header="Overview">
<Grid>
<ListView Margin="10" ItemsSource="{Binding CarLibrary}">
<ListView.View>
<GridView>
<GridViewColumn Header="Picture" Width="100" DisplayMemberBinding="{Binding PicturePath}"/>
<GridViewColumn Header="Year" Width="100" DisplayMemberBinding="{Binding Year}"/>
<GridViewColumn Header="Make" Width="100" DisplayMemberBinding="{Binding Make}"/>
<GridViewColumn Header="Model" Width="100" DisplayMemberBinding="{Binding Model}"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
</TabItem>
这里是c#中视图模型的相关代码,每个Car对象都有Make、Model、Year和PicturePath的属性:
namespace CarApp
{
public class Carvm : INotifyPropertyChanged
{
private CarLib carLibrary;
public CarLib CarLibrary
{
get { return carLibrary; }
set
{
carLibrary = value;
NotifyPropertyChanged("CarLibrary");
}
}
public Carvm()
{
carLibrary = new CarLib();
newCar = new Car();
currentCar = new Car();
rmCommand = new DeleteCommand(carLibrary);
touchCommand = new AddCommand(carLibrary, newCar);
//load list from disk on startup
carLibrary.ReadList();
}
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
}
这里是 CarLib:
namespace CarApp
{
public class CarLib : INotifyPropertyChanged
{
private ObservableCollection<Car> list;
public ObservableCollection<Car> List
{
get { return list; }
set {
list = value;
NotifyPropertyChanged("List");
}
}
public CarLib()
{
List = new ObservableCollection<Car>();
}
/// <summary>
/// Deserializes list of cars and returns the list to user
/// </summary>
public void ReadList()
{
//create local list to hold data
ObservableCollection<Car> carList = new ObservableCollection<Car>();
try
{
using (Stream stream = File.Open("data.bin", FileMode.OpenOrCreate))
{
BinaryFormatter bin = new BinaryFormatter();
try
{
//point List to deserialized stream
List = (ObservableCollection<Car>)bin.Deserialize(stream);
}
catch (SerializationException)
{
Console.WriteLine("The list is empty.");
}
}
}
catch (SerializationException e)
{
if (e.Source != null)
{
Console.WriteLine("Empty List");
}
}
}
/// <summary>
/// Serialize list supplied by the user and write to disk
/// </summary>
public void WriteList()
{
try
{
using (Stream stream = File.Open("data.bin", FileMode.Create))
{
BinaryFormatter bin = new BinaryFormatter();
//write list to disk
bin.Serialize(stream, List);
}
}
catch (IOException)
{
Console.WriteLine("Empty List");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
}
【问题讨论】:
-
是您的
CarLib和ObservableCollection还是Car?否则使用ObservableCollection<Car> -
发布
CarLib的定义 -
@DLeh 我发布了 CarLib.cs 文件。 CarLib 是 Car 的 ObservableCollection。谢谢。
-
@rageit CarLib 是 Car 的 ObservableCollection
标签: c# xaml listview data-binding