我正在尝试显示图片和名称。我创建的模型看起来像这样:
class Controller {
public List<Car> Cars { get; set; }
}
class Car {
public Media Media { get; set; }
public string Name { get; set; }
}
class Media {
public List<View> Views { get; set; }
}
class View {
public Image Thumbnail { get; set; }
}
ViewModel:
class OverviewViewModel {
Controller Controller { get; private set; }
OverviewViewModel(Controller controller) {
Controller = controller;
}
}
所有类都实现了INotifyPropertyChange。 什么是显示Car.Name和汽车中每辆车的视图列表的第一个View.Thumbnail的最佳方式?
我查看了一个DataGrid,但无法弄清楚如何显示第一个缩略图。这可能也不是创建网格的正确方法,我还没有看过DataGrid的样式可能性。
首先,我在代码隐藏文件中创建了一个网格,并显示了有关加载的信息,但我希望能够从模型中更新图像,而无需了解模型的任何信息。
修改
显然我的绑定是正确的,我只需像这样设置DataGridTemplateColumn:
<DataGrid ItemsSource="{Binding Controller.Cars}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding Media.Views[0].Thumbnail}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
答案 0 :(得分:0)
您正在使用ViewModel
并传递直线模型。 ViewModel
的任务是拥有一个特殊版本的模型,该版本特别适用于您要附加它的view
。
所以你可以创建一个IEnumerable<NameThumbViewModel>
,它可以很容易地绑定到datagrid,itemscontrol等。
所以请记住,ViewModel
可以是control
,整个view
甚至是row
中的datagrid
。
您还可以ViewModel
包含ViewModels
或ViewModel
列表。
因此,将model
传递到您的viewmodel
并来回处理映射,因为ViewModels
的一个真正原因是有办法压缩视图相关数据以简单的消费方式。
希望这有帮助