Mega Code Archive

 
Categories / VB.Net Tutorial / WPF
 

Use Dictionary to record which textbox has been changed and not saved

<Window x: Class="Commands.TwoDocument"     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"     Title="TwoDocument" Height="300" Width="300">   <Window.Resources>     <CommandBinding x:Key="binding" Command="ApplicationCommands.Save" Executed="SaveCommand" CanExecute="SaveCommand_CanExecute" />   </Window.Resources>   <Grid>     <Grid.RowDefinitions>       <RowDefinition Height="Auto"></RowDefinition>       <RowDefinition></RowDefinition>     </Grid.RowDefinitions>     <Menu Grid.Row="0">       <MenuItem Header="File">         <MenuItem Command="New"></MenuItem>         <MenuItem Command="Open"></MenuItem>         <MenuItem Command="Save"></MenuItem>         <MenuItem Command="SaveAs"></MenuItem>         <Separator></Separator>         <MenuItem Command="Close"></MenuItem>       </MenuItem>     </Menu>     <TextBox Margin="5" Grid.Row="2" TextWrapping="Wrap" AcceptsReturn="True" TextChanged="txt_TextChanged">       <TextBox.CommandBindings>         <StaticResource ResourceKey="binding"></StaticResource>       </TextBox.CommandBindings>            </TextBox>   </Grid> </Window> //File:Window.xaml.vb Imports System Imports System.Collections.Generic Imports System.Text Imports System.Windows Imports System.Windows.Controls Imports System.Windows.Data Imports System.Windows.Documents Imports System.Windows.Input Imports System.Windows.Media Imports System.Windows.Media.Imaging Imports System.Windows.Shapes Namespace Commands   Public Partial Class TwoDocument     Inherits System.Windows.Window     Private isDirty As New Dictionary(Of [Object], Boolean)()     Public Sub New()       InitializeComponent()     End Sub     Private Sub SaveCommand(sender As Object, e As ExecutedRoutedEventArgs)       Dim text As String = DirectCast(sender, TextBox).Text       isDirty(sender) = False     End Sub     Private Sub txt_TextChanged(sender As Object, e As RoutedEventArgs)       isDirty(sender) = True     End Sub     Private Sub SaveCommand_CanExecute(sender As Object, e As CanExecuteRoutedEventArgs)       If isDirty.ContainsKey(sender) AndAlso isDirty(sender) = True Then         e.CanExecute = True       Else         e.CanExecute = False       End If     End Sub   End Class End Namespace