0

以下は私のデータの構造です:

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

1 に答える 1

0

このコメントに関連するコードを投稿してください。そのトークン リストを誤って無効にしていると思います。

プログラムはエラーなしで正常にコンパイルされます。ただし、TokenList を更新すると、XAML 解析のどこかで NullReference 例外のエラーが表示されます。

于 2012-09-11T12:31:28.503 に答える