ilerleartik
ilerleartik

Reputation: 115

Windows Phone Adding to List issue

(Windows Phone 7 SDK) Hi, I have a ListBox named CTransactionList, and adding some items to this listbox by using data bindings. And Here I have a class to evaulate data bindings.(I think my listbox's XAML code is not needed here as my issue comes out due to some coding problems)

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

Here I have a function, when a move completes, this function runs;(this function is supposed to add new items when function runs)

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

For the first time when move completes, it adds the required elements to my list. But for next times, it does not add to my list. The old one keeps its existence. I tried also this format by getting list definition into my function like:

    public void movecompleted()
    {

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

}

And this time, it replaces my current item with new one. Do not append at the end of list. (Both ways, I have one item in my list, not more) How can I do everytime append to list? Where am I wrong?

Here is my Debugging report. Both ctransactionList object and CTransactionList ListBox have the needed items according to my observations in debug watcher. Only problem, CTransactionList cant refresh itself properly even if it has the resources retrieved from ctransactionList object.

Here is my XAML code for my relevant listbox.(IF NEEDED)

<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>

Thanks in advance.

Upvotes: 1

Views: 570

Answers (2)

nkchandra
nkchandra

Reputation: 5557

As you rightly mentioned, it's not related to your XAML. Problem is in your code.

First simple fix may to clear the ItemsSource before setting the new source, like this

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

This way, you are clearing the existing the databinding and enforcing the new list into the ListBox.

The other and suggestible fix is,

"Change your List to ObservableCollection. Because, ObservableCollection extends the INotifyPropertyChanged and hence has the ability to auto update the ListBox"

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

ObservableCollection<CTransaction> ctransactionList = new ObservableCollection<CTransaction>();//Define my collection

Upvotes: 1

Raymond Holmboe
Raymond Holmboe

Reputation: 2171

But a breakpoint before

CTransactionList.ItemsSource = ctransactionList;

And run the function twice. Do you have two items in ctransactionList now? I suspect the binding fails and ctransactionList are in fact increasing

Upvotes: 0

Related Questions