我正在使用wpf并开始使用mvvm。到目前为止,我没有问题,当我有一个元素,我必须在屏幕上显示它的值(绑定属性的特定名称)。但现在,我必须使用属性列表,而不知道它的名称。所以我创建了一个名为GClass的类,它只有两个名称,即名称和值。我创建了ObservableCollection,现在用直接值填充,并将视图(lstview)datacontext与我创建的对象一起使用。但我看不到任何结果,它总是显示一个空白的列表框。有人能告诉我,看看为什么会这样吗?
c#代码
VDt = new ObservableCollection<GClass>();
var vhDt = message.SelectSingleElement(typeof (Vh)) as Vehiculo;
if(vhDt != null)
{
VDt.Add(new GClass() {Name = "Numero: ", Value = ""});
VDt.Add(new GClass() {Name = "Marca: ", Value = ""});
VDt.Add(new GClass() {Name = "Conductor: ", Value = ""});
lstview.DataContext = this;
_regionManager.RegisterViewWithRegionInIndex(RegionNames.MainRegion, lstview, 0);
视图代码
<ListBox Margin="5,5,5,25" ItemsSource="{Binding VDt}">
<ListBox.Template>
<ControlTemplate>
<ListViewItem Content="{Binding Name}"></ListViewItem>
<ListViewItem Content="{Binding Value}"></ListViewItem>
</ControlTemplate>
</ListBox.Template>
</ListBox>
我在这里有研究,但我不知道,我做错了什么。如果有人帮助我,我会感到沮丧。
答案 0 :(得分:1)
这里有几件事:
首先,<ListBox.Template>
允许您描述您希望如何绘制列表框本身的模板。你想要做的事(貌似)是渲染列表框中的项目,所以你需要<ListBox.ItemTemplate>
其次,在ItemTemplate中,您需要创建,而不是<ControlTemplate>
,而是<DataTemplate>
最后一件事:就个人而言,我会在我的DataTemplates中使用适合用途的控件来呈现视图(例如TextBlocks
而不是ListViewItems
)
所以你的xaml看起来应该是这样的:
<ListBox Margin="5,5,5,25" ItemsSource="{Binding VDt}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" />
<TextBlock Text="{Binding Value}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
希望这会有所帮助:) 伊恩