Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Metro 8 - Binding ListView causes System.ArgumentException "Value does not fall within the expected range"

Am not sure what just happened why this morning, I ran my project and it started causing an System.ArgumentException error. Maybe I changed something last night and I was half-asleep again.

I tried searching for an answer and it gave me an idea about having the same name in property?

I scanned my codes and it looks like it's the same the last it successfully ran .. weird..

Maybe you can help me hunt for the error and enlighten me with it.

Basically the error is causing in this code

lvSubmeters.ItemsSource = this.store

in this code

public MainPage()
{
    this.InitializeComponent();
    this.InitializeControlEvents();
    this.InitializeControls();
}

void InitializeControls()
{
    store = new DataStore();
    store.AllItems = new System.Collections.ObjectModel.ObservableCollection<ItemFields>();
    PopulateTempData();

    lvSubmeters.ItemsSource = this.store;
}

this is my PopulateTempData

void PopulateTempData()
{
    txCurrentBill.Text = "5308.07";
    txKwHUsed.Text = "710";
    txTotalAdditonalCharges.Text = "249.1";
    ComputeKwhPerSubmeter(txTotalAdditonalCharges, null);

    RefreshListView(new ItemFields()
    {
        MeterID = "1234",
        Fullname = "XOP",
        LastReading = 22980,
        NewReading = 23107,
        KwhPerSubmeter = Convert.ToDouble(txKwHPerSub.Tag),
        AdditionalCharges = Convert.ToDouble(txChargeForEachSubmeters.Tag)
    });
    RefreshListView(new ItemFields()
    {
        MeterID = "2345",
        Fullname = "Bigasan",
        LastReading = 0,
        NewReading = 0,
        KwhPerSubmeter = Convert.ToDouble(txKwHPerSub.Tag),
        AdditionalCharges = Convert.ToDouble(txChargeForEachSubmeters.Tag)
    });
    RefreshListView(new ItemFields()
    {
        MeterID = "3456",
        Fullname = "Store",
        LastReading = 0,
        NewReading = 0,
        KwhPerSubmeter = Convert.ToDouble(txKwHPerSub.Tag),
        AdditionalCharges = Convert.ToDouble(txChargeForEachSubmeters.Tag)
    });
    RefreshListView(new ItemFields()
    {
        MeterID = "4567",
        Fullname = "Social & Play",
        LastReading = 7056,
        NewReading = 7511,
        KwhPerSubmeter = Convert.ToDouble(txKwHPerSub.Tag),
        AdditionalCharges = Convert.ToDouble(txChargeForEachSubmeters.Tag)
    });
    RefreshListView(new ItemFields()
    {
        MeterID = "5678",
        Fullname = "Parlor",
        LastReading = 8277,
        NewReading = 8365,
        KwhPerSubmeter = Convert.ToDouble(txKwHPerSub.Tag),
        AdditionalCharges = Convert.ToDouble(txChargeForEachSubmeters.Tag)
    });
}

this is ItemFields Model

using System;

namespace ElectricSubmeterBillComputation.Models
{
    using System.ComponentModel;

    public class ItemFields : System.ComponentModel.INotifyPropertyChanged
    {
        string _meter_id = string.Empty;
        public string MeterID
        {
            get { return this._meter_id; }
            set
            {
                if (_meter_id != value)
                {
                    _meter_id = value;
                    NotifyPropertyChanged("MeterID");
                }
            }
        }

        string _fullname = string.Empty;
        public string Fullname
        {
            get { return this._fullname; }
            set
            {
                if (this._fullname != value)
                {
                    this._fullname = value;
                    NotifyPropertyChanged("Fullname");
                }
            }
        }

        int _lastreading = 0;
        public int LastReading
        {
            get { return this._lastreading; }
            set
            {
                if (this._lastreading != value)
                {
                    this._lastreading = value;
                    NotifyPropertyChanged("LastReading");
                }
            }
        }

        int _newreading = 0;
        public int NewReading
        {
            get { return this._newreading; }
            set
            {
                if (this._newreading != value)
                {
                    this._newreading = value;
                    NotifyPropertyChanged("NewReading");
                }
            }
        }

        int _kwhused = 0;
        public int KwHUsed
        {
            get { return this._kwhused; }
            set
            {
                if (this._kwhused != value)
                {
                    this._kwhused = value;
                    NotifyPropertyChanged("KwHUsed");
                }
            }
        }

        double _KwHPerSubmeter = 0.0;
        public double KwhPerSubmeter
        {
            get { return this._KwHPerSubmeter; }
            set
            {
                if (this._KwHPerSubmeter != value)
                {
                    this._KwHPerSubmeter = value;
                    NotifyPropertyChanged("KwhPerSubmeter");
                }
            }
        }

        double _kwhamount = 0.0;
        public double KwhUsedAmount
        {
            get { return this._kwhamount; }
            set
            {
                if (this._kwhamount != value)
                {
                    this._kwhamount = value;    
                    NotifyPropertyChanged("KwhUsedAmount");
                }
            }
        }

        double _add_charge = 0.0;
        public double AdditionalCharges
        {
            get { return this._add_charge; }
            set
            {
                if (this._add_charge != value)
                {
                    this._add_charge = value;
                    NotifyPropertyChanged("AdditionalCharges");
                }
            }
        }

        double _total_amount = 0.0;
        public double TotalAmount
        {
            get { return this._total_amount; }
            set
            {
                if (this._total_amount != value)
                {
                    this._total_amount = value;
                    NotifyPropertyChanged("TotalAmount");
                }
            }
        }

        public void Update()
        {
            KwHUsed = NewReading - LastReading;
            KwhUsedAmount = KwHUsed * KwhPerSubmeter;
            TotalAmount = KwhUsedAmount + AdditionalCharges;
        }

        #region INotifyPropertyChanged
        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }
        #endregion
    }
}

and this is the DataStore Model

using System;
using System.Collections.ObjectModel;

namespace ElectricSubmeterBillComputation.Models
{
    using System.ComponentModel;

    public class DataStore : INotifyPropertyChanged
    {
        ObservableCollection<ItemFields> _allItems;
        public ObservableCollection<ItemFields> AllItems
        {
            get { return this._allItems; }
            set
            {
                _allItems = value;
                NotifyPropertyChanged("AllItems");
            }
        }

        public void UpdateAllAmounts(double AdditionalChargersPerSubmeter)
        {
            foreach (ItemFields item in _allItems)
            {
                item.AdditionalCharges = AdditionalChargersPerSubmeter;
                item.Update();
            }
        }

        #region INotifyPropertyChanged
        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }
        #endregion
    }
}

and lastly, my listview

<ListView Grid.Row="3" x:Name="lvSubmeters" ItemTemplate="{StaticResource SubmeterItems}" VerticalAlignment="Top" HorizontalAlignment="Stretch" SelectionChanged="lvSubmeters_SelectionChanged">
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        </Style>
    </ListView.ItemContainerStyle>
</ListView>

and SubmeterItems template

<DataTemplate x:Name="SubmeterItems">
    <Grid VerticalAlignment="Top" HorizontalAlignment="Stretch"  Margin="5,5,5,5">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="166"/>
            <ColumnDefinition Width="100*"/>
            <ColumnDefinition Width="200"/>
        </Grid.ColumnDefinitions>
        <StackPanel Grid.Column="0" VerticalAlignment="Top">
            <TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Top" Text="{Binding MeterID}" FontSize="24"  FontWeight="Bold" Foreground="#FF429AA3" />
            <TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Top" Text="{Binding Fullname}" FontSize="16"  />
        </StackPanel>
        <StackPanel Grid.Column="1" VerticalAlignment="Top" Height="95">
            <TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Top" Text=" " FontSize="24"  FontWeight="Bold" Foreground="#FF429AA3" />
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="100"/>
                    <ColumnDefinition Width="29*"/>
                </Grid.ColumnDefinitions>
                <StackPanel Grid.Column="0">
                    <TextBlock Grid.Column="0" VerticalAlignment="Top" Text="Last Reading:" FontSize="14" Margin="0,0,5,5"  />
                    <TextBlock Grid.Column="0" VerticalAlignment="Top" Text="New Reading:" FontSize="14" Margin="0,0,5,5"  />
                    <TextBlock Grid.Column="0" VerticalAlignment="Top" Text="KW/H Used:" FontSize="14" Margin="0,0,5,5"  />
                </StackPanel>
                <StackPanel Grid.Column="1">
                    <TextBlock Grid.Column="1" VerticalAlignment="Top" Text="{Binding LastReading}" FontSize="14" Margin="0,0,5,5" FontWeight="Bold"  />
                    <TextBlock Grid.Column="1" VerticalAlignment="Top" Text="{Binding NewReading}" FontSize="14" Margin="0,0,5,5" FontWeight="Bold"  />
                    <TextBlock Grid.Column="1" VerticalAlignment="Top" Text="{Binding KwHUsed}" FontSize="14" Margin="0,0,5,5" FontWeight="Bold"  />
                </StackPanel>
            </Grid>
        </StackPanel>

        <StackPanel Grid.Column="2" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" Background="Black">
            <TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Top" Text="{Binding KwhUsedAmount}" FontSize="20"  FontWeight="Bold" Foreground="Red" TextAlignment="Right" Margin="0,0,5,0" />
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
                <TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Top" Text="+" FontSize="20" Foreground="#99FF0000" TextAlignment="Right"  Margin="0,0,5,0"/>
                <TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Top" Text="{Binding AdditionalCharges}" FontSize="20" Foreground="#99FF0000" TextAlignment="Right"  Margin="0,0,5,0"/>
            </StackPanel>
            <TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Top" Text="{Binding TotalAmount}" FontSize="34" FontWeight="Bold" Foreground="Green" TextAlignment="Right"  Margin="0,0,5,0" />
        </StackPanel>
    </Grid>
</DataTemplate>

and finally the stack trace

   at Windows.UI.Xaml.Controls.ItemsControl.put_ItemsSource(Object value)
   at ElectricSubmeterBillComputation.MainPage.InitializeControls() in d:\Codes\WindowsMetro\ElectricSubmeterBillComputation\ElectricSubmeterBillComputation\MainPage.xaml.cs:line 43
   at ElectricSubmeterBillComputation.MainPage..ctor() in d:\Codes\WindowsMetro\ElectricSubmeterBillComputation\ElectricSubmeterBillComputation\MainPage.xaml.cs:line 33
   at ElectricSubmeterBillComputation.ElectricSubmeterBillComputation_XamlTypeInfo.XamlTypeInfoProvider.Activate_1_MainPage() in d:\Codes\WindowsMetro\ElectricSubmeterBillComputation\ElectricSubmeterBillComputation\obj\Debug\XamlTypeInfo.g.cs:line 121
   at ElectricSubmeterBillComputation.ElectricSubmeterBillComputation_XamlTypeInfo.XamlUserType.ActivateInstance() in d:\Codes\WindowsMetro\ElectricSubmeterBillComputation\ElectricSubmeterBillComputation\obj\Debug\XamlTypeInfo.g.cs:line 277
like image 505
Jayson Ragasa Avatar asked Jan 01 '26 05:01

Jayson Ragasa


1 Answers

Solved it ..

lvSubmeters.ItemsSource = this.store;

it should be

lvSubmeters.ItemsSource = this.store.AllItems;



so in order to make the first code above

lvSubmeters.DataContext = this.store;

ListView should have

ItemsSource="{Binding AllItems}"
like image 104
Jayson Ragasa Avatar answered Jan 02 '26 18:01

Jayson Ragasa



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!