Click here to Skip to main content
15,881,424 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
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
VB
Class MainWindow 
    Sub New()

        ' This call is required by the designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.
        Dim vm As New MainViewModel
        Me.DataContext = vm
    End Sub
End Class

my viewmodel for main window
VB
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  'some SAMPLE data to start
                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

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

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

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900