Use Dictionary to record which textbox has been changed and not saved : TextBox « Windows Presentation Foundation « VB.Net Tutorial






<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 Height="Auto"></RowDefinition>
      <RowDefinition></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
WPF Use Dictionary To Record Which Textbox Has Been Changed And Not Saved








16.4.TextBox
16.4.1.You cannot use TextBox and Image at the same time for Button ContentYou cannot use TextBox and Image at the same time for Button Content
16.4.2.Single line and Multiline TextBoxSingle line and Multiline TextBox
16.4.3.TextBox ColumnTextBox Column
16.4.4.Bind value to TextBoxBind value to TextBox
16.4.5.An upside down TextBoxAn upside down TextBox
16.4.6.Style with Data Trigger for TextBoxStyle with Data Trigger for TextBox
16.4.7.TextBox with custom ErrorTemplate and ToolTipTextBox with custom ErrorTemplate and ToolTip
16.4.8.TextBox uses the ExceptionValidationRule and UpdateSourceExceptionFilter handlerTextBox uses the ExceptionValidationRule and UpdateSourceExceptionFilter handler
16.4.9.TextBox with UpdateSourceExceptionFilter handlerTextBox with UpdateSourceExceptionFilter handler
16.4.10.TextBox focus listenerTextBox focus listener
16.4.11.TextBox MouseLeftButtonDown action and PreviewMouseLeftButtonDown actionTextBox MouseLeftButtonDown action and PreviewMouseLeftButtonDown action
16.4.12.Mark the text control as being changed to prevent any text content or selection changed eventsMark the text control as being changed to prevent any text content or selection changed events
16.4.13.Listen to TextBox text changed eventListen to TextBox text changed event
16.4.14.Handler for the PreviewKeyDown event on the TextBoxHandler for the PreviewKeyDown event on the TextBox
16.4.15.Format TextBox with MenuItem: normal, bold, italicFormat TextBox with MenuItem: normal, bold, italic
16.4.16.TextBox: set text, select all, clear, prepend, insert, append, cut, paste, undoTextBox: set text, select all, clear, prepend, insert, append, cut, paste, undo
16.4.17.Set TextBox to editableSet TextBox to editable
16.4.18.Scroll TextBoxScroll TextBox
16.4.19.Use TextBox.CommandBindingst to bind commandUse TextBox.CommandBindingst to bind command
16.4.20.Use Dictionary to record which textbox has been changed and not savedUse Dictionary to record which textbox has been changed and not saved
16.4.21.Set TextBox ContextMenu to nullSet TextBox ContextMenu to null
16.4.22.TextBox Selection start, end and selected textTextBox Selection start, end and selected text
16.4.23.Scrollable TextBox ColumnScrollable TextBox Column
16.4.24.Check Spelling ErrorCheck Spelling Error