1

(Windows Phone 7 SDK)こんにちは。CTransactionListという名前のリストボックスがあり、データバインディングを使用してこのリストボックスにいくつかの項目を追加しています。そして、ここにデータバインディングを評価するクラスがあります(コーディングの問題が原因で問題が発生するため、ここではリストボックスのXAMLコードは必要ないと思います)

public class CTransaction
    {
        public String Date1 { get; set; }
        public String Amount1 { get; set; }
        public String Type1 { get; set; }
        public CTransaction(String date1, String amount1, String type1)
        {
            this.Date1 = date1;
            this.Amount1 = amount1;
            switch (type1)
            {
                case "FR":
                    this.Type1 = "Images/a.png";
                    break;

                case "TA":
                    this.Type1 = "Images/b.png";
                    break;

                case "DA":
                    this.Type1 = "Images/c.png";
                    break;
            }
        }
    }

ここに関数があります。移動が完了すると、この関数が実行されます(この関数は、関数の実行時に新しいアイテムを追加することになっています)

List<CTransaction> ctransactionList = new List<CTransaction>();//Define my list

    public void movecompleted()
    {


        String DefaultDate = "";
        String DefaultAmount = "";
        String RandomType = "";

        DefaultDate = nameend.Text;
        DefaultAmount = diffend.Text;
        RandomType = "FR";

        ctransactionList.Add(new CTransaction(DefaultDate, DefaultAmount, RandomType));

        CTransactionList.ItemsSource = ctransactionList;
    }

移動が完了すると、初めて必要な要素がリストに追加されます。しかし、次回のために、それは私のリストに追加されません。古いものはその存在を維持します。次のようにリスト定義を関数に組み込んで、この形式も試しました。

    public void movecompleted()
    {

        List<CTransaction> ctransactionList = new List<CTransaction>(); //List definition in function
        String DefaultDate = "";
        //...Same

}

そして今回は、現在のアイテムを新しいアイテムに置き換えます。リストの最後に追加しないでください。(どちらの方法でも、リストに1つのアイテムがあり、それ以上はありません)リストに追加するたびにどのようにすればよいですか?私はどこが間違っていますか?

これが私のデバッグレポートです。ctransactionListオブジェクトとCTransactionListListBoxの両方に、debugwatcherでの私の観察によると必要なアイテムがあります。唯一の問題は、CTransactionListオブジェクトから取得したリソースがある場合でも、CTransactionListが適切に更新できないことです。

これが私の関連リストボックスのXAMLコードです。(必要に応じて)

<Grid>
                <ListBox Name="CTransactionList" Margin="0,0,0,0"  >
                    <ListBox.ItemTemplate >
                        <DataTemplate>
                            <Button Width="400" Height="120"  >
                                <Button.Content >
                                    <StackPanel Orientation="Horizontal" Height="80" Width="400">
                                        <Image Source="{Binding Type1}" Width="80" Height="80"/>
                                        <StackPanel Orientation="Vertical" Height="80">
                                            <StackPanel Orientation="Horizontal" Height="40">
                                                <TextBlock Width="100" FontSize="22" Text="Name:" Height="40"/>
                                                <TextBlock Width="200" FontSize="22" Text="{Binding Date1}" Height="40"/>

                                            </StackPanel>
                                            <StackPanel Orientation="Horizontal" Height="40">
                                                <TextBlock Width="100" FontSize="22" Text="Difficulty:" Height="40"/>
                                                <TextBlock Width="200" FontSize="22" Text="{Binding Amount1}" Height="40"/>
                                            </StackPanel>
                                        </StackPanel>
                                    </StackPanel>
                                </Button.Content>
                            </Button>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

            </Grid>

前もって感謝します。

4

2 に答える 2

1

あなたが正しく述べたように、それはあなたの XAML とは関係ありません。問題はあなたのコードにあります。

次のように、最初の簡単な修正で、新しいソースを設定する前に ItemsSource をクリアできます。

CTransactionList.ItemsSource = null;
CTransactionList.ItemsSource = ctransactionList;

このようにして、既存のデータバインディングをクリアし、新しいリストを ListBox に強制します。

他の提案可能な修正は、

「に変更ListしますObservableCollection。なぜなら、ObservableCollectionINotifyPropertyChanged を拡張するため、ListBox を自動更新する機能があるからです」

List<CTransaction> ctransactionList = new List<CTransaction>();//Change this to below

ObservableCollection<CTransaction> ctransactionList = new ObservableCollection<CTransaction>();//Define my collection
于 2013-02-08T07:59:56.310 に答える
0

しかし、その前にブレークポイント

CTransactionList.ItemsSource = ctransactionList;

そして、関数を 2 回実行します。今、2つのアイテムがありctransactionListますか?バインディングが失敗していると思わctransactionListれ、実際には増加しています

于 2013-02-08T01:42:48.287 に答える