以下は私のデータの構造です:
public class TokenItems
{
public int ID { get; set; }
public int itemID { get; set; }
public string name { get; set; }
public int qty { get; set; }
public int twQty { get; set; }
public bool readyStatus { get; set; }
public Nullable<DateTime> orderOn { get; set; }
public int styleType { get; set; }
}
public class Token
{
public int tokenNo { get; set; }
public Nullable<DateTime> startedOn { get; set; }
public List<TokenItems> tokenItems { get; set; }
public bool readyStatus { get; set; }
public bool acceptStatus { get; set; }
}
上記の構造は、次の DataTemplate にうまく適合します。(DataTemplate 内に複数のデータ テンプレート、DataTemplate があります)
TokenPanel には、次のようなコード ビハインドから割り当てられる Token クラスからのデータがあります。
TokenPanel.ItemsSource = List<Token> filledList;
tokenItems は XAML 内で割り当てられます。
ItemsSource = {Binding List<TokenItems> tokenItem}
さらに、tokenItems の Template には、tokenItem のリスト項目から作成されたボタンのテンプレートが含まれています。
Click イベント (listClick) でボタンにカスタム スタイル (redButton) を適用しました。
<ScrollViewer>
<ItemsControl x:Name="TokenPanel">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.119*"/>
<RowDefinition Height="0.881*"/>
</Grid.RowDefinitions>
<TextBlock TextWrapping="Wrap" Text="{Binding tokenNo}" />
<StackPanel Grid.Row="1" Width="Auto" HorizontalAlignment="Stretch">
<ItemsControl Height="Auto" ItemsSource="{Binding tokenItems}" HorizontalAlignment="Stretch" Width="Auto">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Height="38" Width="Auto" Style="{StaticResource redButton}" HorizontalContentAlignment="Stretch" Click="listClick" >
<TextBlock Text= "{Binding name}"/>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Height="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" x:Name="tokenListBox" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</ScrollViewer>
プログラムはエラーなしで正常にコンパイルされます。ただし、TokenList を更新すると、XAML 解析のどこかで NullReference 例外のエラーが表示されます。
クリック イベントを割り当てずに、XAML から Click イベント プロパティを削除しようとしました。これはプログラムを非常にうまく実行しました。しかし、私が一番欲しいボタンをクリックすることはできません。さらに、カスタム スタイルも必要です。
問題が何であるかを理解できません...迅速な修正をいただければ幸いです。
編集:
これにより、tokenList が更新されます。
public void update() {
List<TokenItems> tempList = new List<TokenItems>();
tokenList.Clear(); // clears previous items in tokenList;
while(database.Read()) {
tempList.Add(new Token() {
item= (int)database["item"]
});
}
var temp = new List<BumpBar.TokenItems>();
temp.AddRange(tokenModify(tempItems)); // modifies the items within the list
tempItems.Clear(); // clear to refill the tempItems
tempItems.AddRange(temp);
tokenList.Add(new Token() {
tokenNo = tokensList[i].tokenNo,
tokenItems = tempItems,
startedOn = tokensList[i].startedOn
});
}