2016-04-26 5 views
0

XAMLに未知数のチェックボックスを表示するにはどうすればよいですか?私は可能な値のリストを抽出するためにデータベースを照会しています、そして、それらの値をチェックボックスのリストとして表示したいと思います。 DBテーブルの中には、値が小さいものもあれば、100以上のものがあるものもあります。WPF XAMLデータベース駆動チェックボックスの値

XAML:

<ListBox x:Name="SuppliersSearchStatusListBox" Margin="100,100,0,0" ScrollViewer.CanContentScroll="True" AllowDrop="True" MaxHeight="50" MaxWidth="200" HorizontalAlignment="Left" VerticalAlignment="Top" ItemsSource="{Binding ListStatusOptions}"> 
    <CheckBox Content="{Binding arrStatusOption}"/> 
</ListBox> 

CS:

public void ListStatusOptions() 
{ 
    // Query, vars and debug info removed 
    conn.Open(); 
    SqlDataAdapter dataAdapter = new SqlDataAdapter(strSQLQuery, conn); 
    DataSet ds = new DataSet(); 
    dataAdapter.Fill(ds, "StatusOptions"); 

    int varArrCount = ds.Tables[0].Rows.Count; 

    string[] arrStatusOption = new string[varArrCount]; 
    int i = 0; 
    foreach (DataRow dr in ds.Tables[0].Rows) 
    { 
     arrStatusOption[i] = dr["StatusValue"].ToString(); 
     i++; 
    } 
    conn.Close(); 
} 

DBクエリを配列に結果を返し、期待通りの値がありますが、チェックボックスの一覧がXAMLページに表示されません。私は何が欠けていますか?

答えて

1

使用データテンプレートリストボックス内の各項目をテンプレートに:

<ListBox x:Name="SuppliersSearchStatusListBox" 
     scrollViewer.CanContentScroll="True" 
     AllowDrop="True" 
     ItemsSource="{Binding ListStatusOptions}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <CheckBox Content="{Binding arrStatusOption}" 
         IsChecked="{Binding IsChecked}"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

その後の代わりにバインドするIsSelectedプロパティを使用して新しいクラスにListStatusOptionsを変更するだけで

public class StatusOption 
{ 
    public string name { get; set; } 
    public bool IsSelected { get; set; } 
} 

その後、あなたの変更をストリングスこの新しいクラスを使用するコード

public void ListStatusOptions() 
{ 
    // Query, vars and debug info removed 
    conn.Open(); 
    SqlDataAdapter dataAdapter = new SqlDataAdapter(strSQLQuery, conn); 
    DataSet ds = new DataSet(); 
    dataAdapter.Fill(ds, "StatusOptions"); 

    int varArrCount = ds.Tables[0].Rows.Count; 

    var arrStatusOption = new StatusOption[varArrCount]; 
    int i = 0; 
    foreach (DataRow dr in ds.Tables[0].Rows) 
    { 
     arrStatusOption[i] = new StatusOption 
           { 
            Name = dr["StatusValue"].ToString(), 
            IsSelected = false 
           } 
     i++; 
    } 
    conn.Close(); 
} 
+0

ありがとうございます。私は変更を理解することを公言することはできませんが、それは学習の喜びであり、Wroxのプレスを続けています:-) – Matt

関連する問題