我似乎无法让 DataTemplate 在 WPF 中工作
我尝试了几种不同的方法来让一个简单的 DataTemplate 示例正常工作。但是,我没有任何运气。下面的 XAML 的数据上下文是在代码隐藏中设置的。此处包含的两个代码示例包装在我的应用程序中的元素中,但这是唯一的外部考虑因素。第一个代码示例有效。它显示数据。但是,如果我将功能放入 DataTemplate 中,然后尝试使用该模板,则它不起作用。
工作示例:
<Canvas Height="100" Width="300">
<TextBlock Text="{Binding Path=DataSheet.Item.ClassId}" Canvas.Left="10"></TextBlock>
<TextBlock Text="{Binding Path=DataSheet.Item.ClassName}" Canvas.Right="100"></TextBlock>
</Canvas>
不起作用的示例(但是,不会引发错误):
<Window.Resources>
<DataTemplate x:Key="FirstTemplate">
<Grid Margin="4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="Key" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBox Text="{Binding ClassId}"></TextBox>
<TextBox Text="{Binding ClassName}"></TextBox>
</Grid>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox ItemsSource="{Binding Path=DataSheet.Item}" Grid.IsSharedSizeScope="True"
HorizontalAlignment="Stretch"
ItemTemplate="{StaticResource ResourceKey=FirstTemplate}"/>
</Grid>
任何有关我做错了什么的建议将非常感激。
谢谢。
I have tried several different ways to get a simple DataTemplate example to work. But, I am not having any luck. The data context for the XAML below is being set in the code-behind. The two code examples included here are wrapped in the element in my application but, that is the only outside consideration. The first code example works. It displays the data. But, if I put the functionality in a DataTemplate, and then try to use the template, it does not work.
Working Example:
<Canvas Height="100" Width="300">
<TextBlock Text="{Binding Path=DataSheet.Item.ClassId}" Canvas.Left="10"></TextBlock>
<TextBlock Text="{Binding Path=DataSheet.Item.ClassName}" Canvas.Right="100"></TextBlock>
</Canvas>
Example that DOES NOT work (but, no error is thrown):
<Window.Resources>
<DataTemplate x:Key="FirstTemplate">
<Grid Margin="4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="Key" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBox Text="{Binding ClassId}"></TextBox>
<TextBox Text="{Binding ClassName}"></TextBox>
</Grid>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox ItemsSource="{Binding Path=DataSheet.Item}" Grid.IsSharedSizeScope="True"
HorizontalAlignment="Stretch"
ItemTemplate="{StaticResource ResourceKey=FirstTemplate}"/>
</Grid>
Any advice as to what I am doing wrong would really be appreciated.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您的
ItemSource
应该是一个集合,同时DataSheet.Item
看起来像一个单个项目。您应该将其包装到集合中。
或者您可以手动添加 ListBoxItem。
Your
ItemSource
should be a collection meanwhileDataSheet.Item
looks like a single item.You should wrap it into collection.
Or you could manually add ListBoxItem.
根据您提供的工作代码,我假设 DataSheet.Item 不是 IEnumerable。
如果它不是 IEnumerable 将其绑定到 ListBox.ItemsSource 似乎不合适。
From the working code you have presented, I am assuming that DataSheet.Item is not IEnumerable.
If it is not IEnumerable binding it to ListBox.ItemsSource doesn't seem appropriate.
试试这个:
这里有一个链接了解更多信息
Try this:
Here's a link for more info