【问题标题】:WPF beginner: binding and templatesWPF 初学者:绑定和模板
【发布时间】:2012-11-16 00:59:20
【问题描述】:

我现在开始使用 wpf(来自 Windows 窗体),现在我想创建一个小工具来玩 wpf。 我知道有绑定和模板,并且了解它们的作用,并且知道我必须填充 Window.DataContext 并且可以绑定到此,但对于我的示例,我并没有把它们放在一起,也许有人可以帮助我,以便更好地理解这一点。

模型是

类视图模型 { public List'Bank ListOfBanks { get;放; } } 类银行 { public List'Account ListOfAccounts { get;放; } } 类账户 { 公共字符串描述{get;放; } 公共十进制钱{得到;放; } }

我想要做的是有一个(一些漂亮的蓝色)矩形的动态列表(计数 = ListOfBanks 属性中的银行数),并且在这个矩形中应该是一个包含两列(描述和货币属性)的网格应该有与银行模型的 ListOfAccounts 属性中的 Accounts 一样多的行。

我知道的是

公共主窗口() { 初始化组件(); this.DataContext = new ViewModel(); }

我知道这并不多。而且我知道如何将网格列与 Account 属性绑定,仅此而已。

如果有人可以帮助我,那就太好了。

亲切的问候

【问题讨论】:

  • 你有很多学习要做,看来。远远超出一两个问题和答案。这是一篇很棒的文章,它帮助我开始使用 WPF 和 MVVM 模式。 msdn.microsoft.com/en-us/magazine/dd419663.aspx。它现在可能有点先进,但有非常有用的资源的附加链接。
  • 谢谢,我知道 MVVM 模式,但我也会看看这篇文章。

标签: c# wpf


【解决方案1】:

一个简单的方法是使用嵌套的ItemsCollection

<ItemsControl ItemsSource="{Binding ListOfBanks}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
        <StackPanel>
            <TextBlock Text="{Binding ListOfAccounts.Count,StringFormat='Number of Accounts: {0}'}" />
            <ItemsControl ItemsSource="{Binding ListOfAccounts}">
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition />
                            <ColumnDefinition />
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="{Binding Description}" />
                        <TextBlock Grid.Column="1" Text="{Binding Money,StringFormat='{}{0:C}'}" />
                    </Grid>
                </DataTemplate>
            </ItemsControl>
        </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

ItemsControl 是一个基本的重复控件 -- 如果您想要花里胡哨,请使用 ListBox(项目选择)或 DataGrid(排序、分组、自动列等)。

【讨论】:

  • 太好了,这就是我所需要的,这个答案帮助了我超过 100 个教程。
  • 嗨 dbaseman,使用您的代码,我收到一条我不知道的错误消息。 “使用 ItemsSource 时操作无效。改为使用 ItemsControl.ItemsSource 访问和修改元素。”我唯一改变的东西,模型列表是 ObservableLists。
  • @ChristianNeuß 我认为该错误意味着您正在尝试修改ItemsControl.Items...?当使用ItemsSource 绑定项目时,这是不允许的——相反,您必须直接修改源对象,或将ItemsControl.ItemsSource 转换回源对象类型,然后以这种方式修改。
猜你喜欢
  • 1970-01-01
  • 2012-05-11
  • 2016-02-05
  • 2011-04-05
  • 2018-07-02
  • 1970-01-01
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多