我似乎无法让 DataTemplate 在 WPF 中工作

发布于 2024-10-24 04:03:14 字数 1368 浏览 1 评论 0原文

我尝试了几种不同的方法来让一个简单的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

戒ㄋ 2024-10-31 04:03:15

您的 ItemSource 应该是一个集合,同时 DataSheet.Item 看起来像一个单个项目。
您应该将其包装到集合中。

或者您可以手动添加 ListBoxItem。

<ListBox>
    <ListBoxItem Content="{Binding DataSheet.Item}" ContentTemplate="{StaticResource FirstTemplate}"/>
</ListBox>

Your ItemSource should be a collection meanwhile DataSheet.Item looks like a single item.
You should wrap it into collection.

Or you could manually add ListBoxItem.

<ListBox>
    <ListBoxItem Content="{Binding DataSheet.Item}" ContentTemplate="{StaticResource FirstTemplate}"/>
</ListBox>
那一片橙海, 2024-10-31 04:03:15

根据您提供的工作代码,我假设 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.

一瞬间的火花 2024-10-31 04:03:15

试试这个:

  <ListBox ItemsSource="{Binding Path=DataSheet.Item}" Grid.IsSharedSizeScope="True"
             HorizontalAlignment="Stretch"
             ItemTemplate="{StaticResource FirstTemplate}"/>

这里有一个链接了解更多信息

Try this:

  <ListBox ItemsSource="{Binding Path=DataSheet.Item}" Grid.IsSharedSizeScope="True"
             HorizontalAlignment="Stretch"
             ItemTemplate="{StaticResource FirstTemplate}"/>

Here's a link for more info

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文