c# – WPF ItemsControl:似乎无法获取要在视图中显示的项目

c# – WPF ItemsControl:似乎无法获取要在视图中显示的项目,第1张

概述我正在处理的代码是 WPF应用程序的一部分,该应用程序应该显示一组用户可以与之交互的扑克牌堆栈.所以我正在使用三个UserControl: > MainControl > CardStackControl > CardControl 在MainControl.xaml中: <StackPanel Grid.Row="0" Orientation="Horizont 我正在处理的代码是 WPF应用程序的一部分,该应用程序应该显示一组用户可以与之交互的扑克牌堆栈.所以我正在使用三个UserControl:

> MainControl
> CardStackControl
> CardControl

在MainControl.xaml中:

<StackPanel         GrID.Row="0"        OrIEntation="Horizontal">        <ItemsControl             ItemsSource="{Binding Path=CardStacks}"            >            <ItemsPanelTemplate>                <StackPanel OrIEntation="Horizontal" />            </ItemsPanelTemplate>        </ItemsControl>    </StackPanel>

我的数据模板在Resources.xaml文件中定义:

<DataTemplate x:Key="MainTemplate" DataType="{x:Type viewmodel:Mainviewmodel}">    <VIEw:MainControl /></DataTemplate><DataTemplate DataType="{x:Type viewmodel:CardStackviewmodel}">    <VIEw:CardStackControl /></DataTemplate><DataTemplate x:Key="CardTemplate" DataType="{x:Type viewmodel:Cardviewmodel}">    <VIEw:CardControl /></DataTemplate>

CardStackControl.xaml:

<StackPanel OrIEntation="Vertical">    <TextBlock         Height="30"        HorizontalAlignment="Center"        VerticalAlignment="Center"        Text="{Binding Path=Cardname}"         />    <ItemsControl        Height="auto"        ItemsSource="{Binding Path=Cards}"        ItemTemplate="{StaticResource CardTemplate}"        >        <ItemsPanelTemplate>            <StackPanel OrIEntation="Horizontal" />        </ItemsPanelTemplate>    </ItemsControl>    <TextBlock         Height="30"        HorizontalAlignment="Center"        VerticalAlignment="Center"        Text="{Binding Path=Count}"         /></StackPanel>

CardControl.xaml:

<TextBlock         name="TitleTextBlock"        GrID.Row="0"         GrID.Column="1"                           HorizontalAlignment="Center"                           VerticalAlignment="Center"        Text="{Binding Path=name}"        >

Mainviewmodel:

public ObservableCollection<CardStackviewmodel> CardStacks;// ...

CardStackviewmodel:

public class CardStackviewmodel{    private CardStack Model;    public string Cardname    {        get        {            return this.Model.CardType.name;        }    }    public int Count    {        get        {            return this.Model.Cards.Count;        }    }    public ObservableCollection<Cardviewmodel> Cards { get; private set; }    // ...

Cardviewmodel:

/// <summary>    /// A reference to the Card type.    /// </summary>    private Card Model;    /// <summary>    /// RetrIEves the name of the card.    /// </summary>    public string name    {        get        {            return this.Model.CardType.name;        }    }    public string Caption    {        get        {            return this.Model.CardType.Text;        }    }    // ...

在Mainviewmodel,CardStackviewmodel构造函数中,两个ObservableCollection实例都被初始化,填充并填充了一些测试数据.

当我加载应用程序并创建Mainviewmodel时,UserControls不会显示,并且没有任何测试数据可见.我使用this tutorial作为指南,因此Mainviewmodel对应于该窗口中选项卡式控件上的“Workspaces”viewmodel.当然,这个例子应该横向布局每个控件,现在这很好 – 我还在学习WPF.

显然,我已经在.xaml文件和其他脚手架代码中省略了代码生成的标签(如果从这些示例中不清楚,我可以修改它以发布该代码).我现在只测试/绑定到Model类的字符串属性.

解决方法 声明ItemsPanelTemplate的方式不正确:您将其声明为ItemsControl的项目.你应该这样做:

<ItemsControl         ItemsSource="{Binding Path=CardStacks}"        >        <ItemsControl.ItemsPanel>          <ItemsPanelTemplate>            <StackPanel OrIEntation="Horizontal" IsItemsHost="True" />          </ItemsPanelTemplate>        </ItemsControl.ItemsPanel>    </ItemsControl>
总结

以上是内存溢出为你收集整理的c# – WPF ItemsControl:似乎无法获取要在视图中显示的项目全部内容,希望文章能够帮你解决c# – WPF ItemsControl:似乎无法获取要在视图中显示的项目所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1215576.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存