按钮列表绑定到Grid到UserControl(WPF,Linq,Buttons)

时间:2017-04-26 11:53:26

标签: c# wpf linq xaml data-binding

我正在做基于Linq查询的按钮列表。

用户控件的.cs

 public partial class GenerateButtonView : UserControl
 {    
    public GenerateButtonView()
    {
       InitializeComponent();

       List<Button> listOfButtons = new List<Button>();
       for (int x = 0; x <= gb.ListDistinctAutoName().Count; x++)
       {
          Button b = new Button();
          b.Content = "button" + x.ToString();
          listOfButtons.Add(b);               
       }
     }}

GenerateButtonModel.cs

public class GenerateButtonModel
{
   public List<string> ListDistinctAutoName()
   {
      testViewClassDataContext tv = new testViewClassDataContext();
      List<string> q3 = tv.test_views.Select(i => i.AutoName).Distinct().ToList();               

       return q3;
   }}

如何将创建的按钮列表绑定到我的网格?

用户控件的.xaml

<UserControl.....>
....
        <Grid Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="5" Grid.RowSpan="3">

        </Grid>  

</UserControl>

2 个答案:

答案 0 :(得分:1)

您应该使用ItemsControl并将其ItemsSource属性绑定或设置为List<Button>

<ItemsControl x:Name="ic" />
public GenerateButtonView()
{
    InitializeComponent();

    List<Button> listOfButtons = new List<Button>();
    for (int x = 0; x <= gb.ListDistinctAutoName().Count; x++)
    {
        Button b = new Button();
        b.Content = "button" + x.ToString();
        listOfButtons.Add(b);
    }

    ic.ItemsSource = listOfButtons;
}}
  

我的想法是按钮应该水平放置,并且它们之间有边距

然后,您可以使用StackPanel作为ItemsPanel的{​​{1}}:

ItemsControl

您可以设置每个按钮的<ItemsControl x:Name="ic"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal" /> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> </ItemsControl> 属性。

请注意,最佳做法是将Margin属性绑定到数据对象的集合,然后在ItemTemplate中定义实际的UI元素(ItemsSource):

Button

答案 1 :(得分:0)

您需要手动将按钮添加到网格

for (int x = 0; x <= gb.ListDistinctAutoName().Count; x++)
{
    Button b = new Button();
    b.Content = "button" + x.ToString();
    listOfButtons.Add(b);
    grid.Children.Add(b);
}

或使用ItemsControl并将按钮列表设为ItemsSource