将对象添加到WPF面板显示按钮

时间:2017-10-05 07:54:32

标签: c# wpf xaml panel

我想动态地向ObjectsCollection添加对象,然后应该将对象字段的Content(值)按钮添加到面板。

App.xaml.cs     使用System.Windows;

namespace WpfApp1
{
    public partial class App : Application
    {

    }
}

MainWindow.xaml

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ItemsControl Name="dashboardList">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Button Content="{Binding Name}" />
                </DataTemplate>
            </ItemsControl.ItemTemplate>

        </ItemsControl>
    </Grid>
</Window>

DashboadViewModel.cs

using System.Collections.ObjectModel;

namespace WpfApp1
{
    public class DashboardViewModel
    {
        public ObservableCollection<Dashboard> Dashboards { get; set; }

        public DashboardViewModel()
        {
            LoadDashboards();
        }

        public void LoadDashboards()
        {
            ObservableCollection<Dashboard> dashboards = new ObservableCollection<Dashboard>();

            dashboards.Add(new Dashboard { Name = "Dashboard1" });
            dashboards.Add(new Dashboard { Name = "Dashboard2" });

            Dashboards = dashboards;
        }
    }
}

Dashboard.cs

namespace WpfApp1
{
    public class Dashboard
    {
        public string Name;
    }
}

如何创建按钮,我是否使用ItemControl在正确的轨道上?

1 个答案:

答案 0 :(得分:1)

应将

public string Name更改为支持数据绑定的公共属性:

public class Dashboard
{
    public string Name { get; set; }
}

除此之外,应该将一个DashboardViewModel实例分配给Window的DataContext属性,并且ItemsControl的ItemsSource属性应该这样绑定:

<Window ...
    xmlns:local="clr-namespace:WpfApp1">

    <Window.DataContext>
        <local:DashboardViewModel/>
    </Window.DataContext>

    <Grid>
        <ItemsControl ItemsSource="{Binding Dashboards}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Button Content="{Binding Name}" />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Grid>
</Window>

如有必要,您可以在Window的代码中访问视图模型实例,如下所示:

var vm = (DashboardViewModel)DataContext;
vm.LoadDashboards();