如何动态创建按钮列表并在ListBox或ItemsControl中的MainForm中显示它们

时间:2014-04-07 08:49:00

标签: c# wpf

我是WPF的新手。 我想从一个类的列表中创建按钮列表,说“按钮”,并在WPF的MainForm中有两个字段(ButtonContent,ButtonID)。 这背后的想法是,当加载MainForm然后我想动态地制作按钮列表。 最佳示例已在链接中给出 http://www.codeproject.com/Articles/25030/Animating-Interactive-D-Elements-in-a-D-Panel 但我只想让相同尺寸的按钮水平堆叠。

我如何在WPF中执行此操作?提前谢谢。

1 个答案:

答案 0 :(得分:0)

这就是我这样做的方式。这里有一些领域需要你进一步研究,但这将帮助你开始。

首先,您需要ViewModel。这是一个普通的老对象。它公开了与您的业务相关的属性和方法。你提到了ButtonContent和ButtonID。我们假设这两个都是现在的字符串。你还需要一个我假设的按钮命令。

public class ButtonViewModel : INotifyPropertyChanged
{
   private string _content;
   public string Content
   {
      get{ return _content; }
      set{ _content = value; OnPropertyChanged("Content"); }
   }

   // you'll need to implement INotifyPropertyChanged
   // also take a look at RelayCommand

   // here is your command for you're button
   public ICommand ButtonCommand
   {
      get { return new RelayCommand(execute, canExecute); }
   }

   private void execute()
   {
     // my actual command code
   }

   private bool canExecute()
   {
      // this will automatically toggle the enabled state on my button
   }
}

您还有一个视图模型。这将是MainWindow的DataContext。

public class AppViewModel
{
   public ObservableCollection<ButtonViewModel> MyButtons {get; set; }

   public AppViewModel()
   {
      MyButtons = new ObservableCollection<ButtonViewModel>();

      // add some demo data
      MyButtons.Add(new ButtonViewModel() {ButtonContent = "Click Me!"});


   }
}

现在您需要实现该视图。在MainWindow xaml代码中。添加你的xmlns:local namespace。

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

<ListBox ItemsSource="{Binding MyButtons}">
   <ListBox.ItemsTemplate>
      <DataTemplate>
      <Button Command="{Binding ButtonCommand}" Content="{Binding Content}"/>
      </DataTemplate>
   <ListBox.ItemsTemplate>
</ListBox>

希望这可以让你开始朝着正确的方向前进。