2017-04-26 9 views
0

私はLinqクエリに基づいてボタンのリストをやっています。ButtonリストはUserControl(WPF、Linq、Buttons)にグリッドにバインドします

のUserControlは.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; 
    }} 

どのように私は私のグリッドにボタンのリストを作成してバインドすることができますか?

ユーザーコントロールあなたはItemsSource

+0

グリッドはないのItemsSourceプロパティを持つことができ要素の集合をできる。なぜボタンをグリッドに追加したいのですか?どのセルにボタンが配置されるのかをどのように定義しますか? – mm8

+0

私はstackpanelまたはdockpanelにボタンを追加することができますが、私は方法がわかりません.... – 4est

+0

ItemsControlを使用する必要があります。私の答えを見てください。 – mm8

答えて

1

あなたが使用する必要があるとして、ボタンのリストをグリッド

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を使用して設定する必要が

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

     </Grid> 

</UserControl> 
+0

ありがとう@ mm8! 1つの質問 - > DockPanelを作成する場合は、同じ方法でボタンをバインドしますか? – 4est

+0

いいえ、DockPanelにはItemsSourceプロパティはありません。ボタンのドッキング位置を定義する方法は同じです。 – mm8

+0

私の考えでは、ボタンはそれらの間にマージンを持って水平に配置する必要があります。 – 4est

0

の.xaml ItemsControlであり、そのItemsSourceプロパティをにバインドまたは設定します:

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

私の考えはボタンが次にあなたが例えばItemsControlItemsPanelとしてStackPanelを使用することができ

それらの間のマージンをもって水平に配置されるべきであるということです:

<ItemsControl x:Name="ic"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal" /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 

各ボタンのMarginプロパティを設定します。ベストプラクティスは、データオブジェクトのコレクションにItemsSourceプロパティをバインドして、ItemTemplateに、実際のUI要素(Button)を定義するだろうと

注:

<ItemsControl x:Name="ic"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal" /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Button Content="{Binding}" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
関連する問題