0

我不确定标题的最佳表达方式,也找不到相关的问题,但如果有,请指导我。

我正在尝试创建一个投标屏幕,其中显示的按钮数量将取决于用户设置了多少类型的投标(现金、支票、信用卡、借记卡、礼品卡等)。

所以如果我有这样的课:

public class TenderType
{
    public string DisplayName { get; set; }

    // ... other implementation details
}

在我的 DataContext 上,我有一个 TenderTypes 集合,声明如下:

public ObservableCollection<TenderType> TenderTypes { get; private set; }

那么我该如何让我的视图根据集合中有多少 TenderType 实例更新显示的按钮数量,并将它们的 Text 属性绑定到集合中相应项目的 DisplayName 呢?

4

1 回答 1

1

您可以使用 ItemsControl 并为您的 TenderType 创建一个数据模板来显示一个按钮。

这样它只会显示列表中的按钮

xml:

<Window x:Class="WpfApplication8.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication8"
        Title="MainWindow" Height="105" Width="156" Name="UI">
    <Window.Resources>
        <DataTemplate DataType="{x:Type local:TenderType}">
            <Button Content="{Binding DisplayName}" />
        </DataTemplate>
    </Window.Resources>

    <Grid DataContext="{Binding ElementName=UI}">
        <ItemsControl ItemsSource="{Binding TenderTypes}"/>
    </Grid>
</Window>

代码:

public partial class MainWindow : Window
{
    private ObservableCollection<TenderType> _sourceData = new ObservableCollection<TenderType>();

    public MainWindow()
    {
        InitializeComponent();
        TenderTypes.Add(new TenderType { DisplayName = "Stack" });
        TenderTypes.Add(new TenderType { DisplayName = "Overflow" });
    }

    public ObservableCollection<TenderType> TenderTypes 
    {
        get { return _sourceData; }
        set { _sourceData = value; }
    }
}

public class TenderType
{
    public string DisplayName { get; set; }
}

结果:

在此处输入图像描述

于 2013-01-21T22:49:43.790 回答