通过绑定控制显示按钮的数量

时间:2013-01-21 22:25:22

标签: wpf mvvm binding

我不确定说出标题的最佳方法,但找不到相关的问题,但是如果有的话,请指导我。

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

所以,如果我有这样的课程:

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

    // ... other implementation details
}

在我的DataContext上,我有一个TenderTypes集合,如下所示:

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

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

1 个答案:

答案 0 :(得分:1)

您可以使用ItemsControl并为TenderType创建数据窗口以显示Button。

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

的Xaml:

<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; }
}

结果:

enter image description here