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
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}"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With