【问题标题】:Problem Binding a ObservableCollection to a ListBox in WPF/MVVM在 WPF/MVVM 中将 ObservableCollection 绑定到 ListBox 的问题
【发布时间】:2010-05-31 15:57:21
【问题描述】:

我正在编写一些代码,使用 wpf 并开始使用 mvvm。到目前为止,我没有问题,当我有一个元素并且我必须在屏幕上显示它的值时(绑定属性的特定名称)。但是现在,我必须使用属性列表,不知道它的名称。所以我创建了一个名为 GClass 的类,它只有两个属性,名称和值。我创建了 ObservableCollection,现在用直接值填充,并用我创建的对象分配视图(lstview)数据上下文。但我看不到任何结果,它总是显示一个空白列表框。有人可以告诉我看看为什么会发生吗?

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>

我在这里进行了研究,但我看不到,我做错了什么。如果有人帮助我,我会很感激。

【问题讨论】:

  • 您看到填充的列表框还是没有项目?
  • 我看到一个空白框,根本没有项目或滚动条,就像您在设计屏幕中看到的列表框一样

标签: wpf mvvm binding


【解决方案1】:

这里有几件事:

首先,&lt;ListBox.Template&gt; 允许您描述您希望如何绘制列表框本身的模板。您正在尝试做的(看似)是在列表框中呈现项目,因此您需要 &lt;ListBox.ItemTemplate&gt;

其次,在 ItemTemplate 中,您需要创建的不是&lt;ControlTemplate&gt;,而是&lt;DataTemplate&gt;

最后一件事:就我个人而言,我会在我的 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>

希望这会有所帮助:) 伊恩

【讨论】:

  • 谢谢!!它工作完美。我什至看到您可以将 ... 取出,并用 替换它,这样您就有了一个通用视图容器,并在特定视图中制作详细信息
  • 关于这种形式的文本绑定,可能需要嵌套文本块以保留正确的文本布局(换行、间距等)。试试这个:
猜你喜欢
  • 2013-12-31
  • 2014-08-02
  • 2015-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多