I'm considering this style as my prototype for building a new application
the main concern is how i'm doing my
Partial Linq Class
This seems to work okay so far...
(I'm concerned it will become complicated with other sub-totals coming from future child table data that are edited by child windows.)
Any destructive comments are appreciated!
Xaml main window
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Test Update" Height="350" Width="200" DataContext="{Binding}">
<StackPanel Orientation="Vertical">
<Label Content="Materials"/>
<TextBox Text="{Binding Sale1.materials,StringFormat=C}"/>
<Label Content="Labor"/>
<TextBox Text="{Binding Sale1.labor,StringFormat=C}"/>
<Label Content="Sub-total " Background="LightGray"/>
<TextBox Text="{Binding Sale1.subtotal,Mode=OneWay,StringFormat=C}" removed="LightGray"/>
<Label Content="Tax Rate"/>
<TextBox Text="{Binding Sale1.taxrate}"/>
<Label Content="Total" Background="LightBlue"/>
<TextBox Text="{Binding Sale1.total,Mode=OneWay,StringFormat=C}" removed="LightBlue"/>
</StackPanel>
</Window>
my mainwindow code behind
Class MainWindow
Sub New()
InitializeComponent()
Dim vm As New MainViewModel
Me.DataContext = vm
End Sub
End Class
my viewmodel for main window
Imports System.ComponentModel
Public Class MainViewModel
Implements INotifyPropertyChanged
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Protected Sub OnPropertyChanged(ByVal name As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(name))
End Sub
Private _Sale1 As Sale
Public Property Sale1 As Sale
Get
If _Sale1 Is Nothing Then
_Sale1 = New Sale
With _Sale1
.gid = Guid.NewGuid
.labor = 1
.materials = 2
.taxrate = 8
End With
End If
Return _Sale1
End Get
Set(value As Sale)
_Sale1 = value
OnPropertyChanged("Sale1")
End Set
End Property
End Class
My partial Linq class
Partial Class Sale
Public ReadOnly Property total As Decimal
Get
Return Me.materials + (Me.materials * (Me.taxrate / 100)) + Me.labor
End Get
End Property
Public ReadOnly Property subtotal As Decimal
Get
Return Me.materials + Me.labor
End Get
End Property
Private Sub OnlaborChanged()
UpdateCalculatedTotals()
End Sub
Private Sub OnmaterialsChanged()
UpdateCalculatedTotals()
End Sub
Private Sub OntaxrateChanged()
UpdateCalculatedTotals()
End Sub
Private Sub UpdateCalculatedTotals()
SendPropertyChanged("subtotal")
SendPropertyChanged("total")
End Sub
End Class
Linq to SQL designer created class:
Option Strict On
Option Explicit On
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Data.Linq
Imports System.Data.Linq.Mapping
Imports System.Linq
Imports System.Linq.Expressions
Imports System.Reflection
Partial Public Class linqSQLClassDataContext
Inherits System.Data.Linq.DataContext
Private Shared mappingSource As System.Data.Linq.Mapping.MappingSource = New AttributeMappingSource()
#Region "Extensibility Method Definitions"
Partial Private Sub OnCreated()
End Sub
Partial Private Sub InsertSale(instance As Sale)
End Sub
Partial Private Sub UpdateSale(instance As Sale)
End Sub
Partial Private Sub DeleteSale(instance As Sale)
End Sub
#End Region
Public Sub New(ByVal connection As String)
MyBase.New(connection, mappingSource)
OnCreated
End Sub
Public Sub New(ByVal connection As System.Data.IDbConnection)
MyBase.New(connection, mappingSource)
OnCreated
End Sub
Public Sub New(ByVal connection As String, ByVal mappingSource As System.Data.Linq.Mapping.MappingSource)
MyBase.New(connection, mappingSource)
OnCreated
End Sub
Public Sub New(ByVal connection As System.Data.IDbConnection, ByVal mappingSource As System.Data.Linq.Mapping.MappingSource)
MyBase.New(connection, mappingSource)
OnCreated
End Sub
Public ReadOnly Property Sales() As System.Data.Linq.Table(Of Sale)
Get
Return Me.GetTable(Of Sale)
End Get
End Property
End Class
<Global.System.Data.Linq.Mapping.TableAttribute(Name:="")> _
Partial Public Class Sale
Implements System.ComponentModel.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged
Private Shared emptyChangingEventArgs As PropertyChangingEventArgs = New PropertyChangingEventArgs(String.Empty)
Private _gid As System.Guid
Private _materials As Decimal
Private _labor As Decimal
Private _taxrate As Decimal
#Region "Extensibility Method Definitions"
Partial Private Sub OnLoaded()
End Sub
Partial Private Sub OnValidate(action As System.Data.Linq.ChangeAction)
End Sub
Partial Private Sub OnCreated()
End Sub
Partial Private Sub OngidChanging(value As System.Guid)
End Sub
Partial Private Sub OngidChanged()
End Sub
Partial Private Sub OnmaterialsChanging(value As Decimal)
End Sub
Partial Private Sub OnmaterialsChanged()
End Sub
Partial Private Sub OnlaborChanging(value As Decimal)
End Sub
Partial Private Sub OnlaborChanged()
End Sub
Partial Private Sub OntaxrateChanging(value As Decimal)
End Sub
Partial Private Sub OntaxrateChanged()
End Sub
#End Region
Public Sub New()
MyBase.New
OnCreated
End Sub
<Global.System.Data.Linq.Mapping.ColumnAttribute(Storage:="_gid", DbType:="UniqueIdentifier NOT NULL", IsPrimaryKey:=true)> _
Public Property gid() As System.Guid
Get
Return Me._gid
End Get
Set
If ((Me._gid = value) _
= false) Then
Me.OngidChanging(value)
Me.SendPropertyChanging
Me._gid = value
Me.SendPropertyChanged("gid")
Me.OngidChanged
End If
End Set
End Property
<Global.System.Data.Linq.Mapping.ColumnAttribute(Storage:="_materials")> _
Public Property materials() As Decimal
Get
Return Me._materials
End Get
Set
If ((Me._materials = value) _
= false) Then
Me.OnmaterialsChanging(value)
Me.SendPropertyChanging
Me._materials = value
Me.SendPropertyChanged("materials")
Me.OnmaterialsChanged
End If
End Set
End Property
<Global.System.Data.Linq.Mapping.ColumnAttribute(Storage:="_labor")> _
Public Property labor() As Decimal
Get
Return Me._labor
End Get
Set
If ((Me._labor = value) _
= false) Then
Me.OnlaborChanging(value)
Me.SendPropertyChanging
Me._labor = value
Me.SendPropertyChanged("labor")
Me.OnlaborChanged
End If
End Set
End Property
<Global.System.Data.Linq.Mapping.ColumnAttribute(Storage:="_taxrate")> _
Public Property taxrate() As Decimal
Get
Return Me._taxrate
End Get
Set
If ((Me._taxrate = value) _
= false) Then
Me.OntaxrateChanging(value)
Me.SendPropertyChanging
Me._taxrate = value
Me.SendPropertyChanged("taxrate")
Me.OntaxrateChanged
End If
End Set
End Property
Public Event PropertyChanging As PropertyChangingEventHandler Implements System.ComponentModel.INotifyPropertyChanging.PropertyChanging
Public Event PropertyChanged As PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
Protected Overridable Sub SendPropertyChanging()
If ((Me.PropertyChangingEvent Is Nothing) _
= false) Then
RaiseEvent PropertyChanging(Me, emptyChangingEventArgs)
End If
End Sub
Protected Overridable Sub SendPropertyChanged(ByVal propertyName As [String])
If ((Me.PropertyChangedEvent Is Nothing) _
= false) Then
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
End If
End Sub
End Class
-josh