我尝试将一个字符串值列表绑定到一个列表框,以便逐行列出它们的值。
<ListBox Margin="20" ItemsSource="{Binding Path=PersonNames}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Id}"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
但是我不知道我应该把什么而不是Id
放进textblock,因为它们都是字符串值,而不是自定义类。
此外,它还抱怨说,当我在MainPage中找到PersonNames时,不必找到它,因为MainPage.PersonNames。
我将数据上下文设置为:
DataContext="{Binding RelativeSource={RelativeSource Self}}"
我做错了吗?
4条答案
按热度按时间jjhzyzn01#
如果简单地把你的ItemsSource绑定成这样:
您的XAML应该如下所示:
更新日期:
这是使用DataContext时的解决方案。以下代码是您将传递给页面的DataContext和DataContext设置的视图模型:
您的XAML现在如下所示:
这种方法的优点是可以在MyViewModel类中放置更多的属性或复杂对象,然后在XAML中提取它们。例如,要传递一个List of Person对象:
以及XAML:
希望这对你有帮助!:)
uoifb46i2#
您应该向我们展示PersonNames的代码,我不确定是否理解您的问题,但您可能希望按如下方式绑定它:
或
这将绑定到列表中的当前元素(假设PersonNames是一个字符串列表)。否则,您将在列表中看到类名。
amrnrhlw3#
如果items source可枚举为string-entries,请使用以下代码:
你可以在任何对象上使用这个语法。通常,ToString()方法会被调用来获取值。这在很多情况下是非常方便的。但是要注意,不会出现任何更改通知。
wz3gfoph4#
您可以在不将TextBlock控件显式定义为ListBox的一部分的情况下执行此操作(除非您需要更好的格式)。
窗口1.xaml
窗口1.xaml.cs