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

}

这一次,它用新的替换了我当前的项目。不要附加在列表的末尾。(两种方式,我的列表中只有一项,而不是更多)我如何每次都追加到列表中?我哪里错了?

这是我的调试报告。根据我在调试观察器中的观察,ctransactionList 对象和 CTransactionList ListBox 都有所需的项目。唯一的问题是,即使 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 中。

另一个建议的解决方法是,

“将您更改ListObservableCollection. 因为,ObservableCollection扩展了 INotifyPropertyChanged,因此能够自动更新 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;

并运行该功能两次。你现在有两个项目ctransactionList吗?我怀疑绑定失败并且ctransactionList实际上正在增加

于 2013-02-08T01:42:48.287 回答