2017-10-05 11 views
1

ObservationCollectionにオブジェクトを動的に追加すると、そのオブジェクトのフィールドのContent(値)を持つボタンがパネルに追加されます。WPFパネルにボタンを表示するオブジェクトを追加する

App.xaml.cs using 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

public string Nameは、データバインディングをサポートするためのパブリックプロパティに変更する必要があります。そのほかに

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

、DashboardViewModelのインスタンスはウィンドウの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> 

必要であれば、あなたはこのような背景にあるウィンドウのコードでビューモデルのインスタンスにアクセスすることができます

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

働いていただきありがとうございます。 – Elsbeth

関連する問題