Use Dictionary to record which textbox has been changed and not saved : TextBox « Windows Presentation Foundation « C# / CSharp 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.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace Commands
{
    public partial class TwoDocument : System.Windows.Window
    {
        Dictionary<Object, bool> isDirty = new Dictionary<Object, bool>();
        public TwoDocument()
        {
            InitializeComponent();
        }

        private void SaveCommand(object sender, ExecutedRoutedEventArgs e)
        {            
            string text = ((TextBox)sender).Text;
            isDirty[sender] = false;
        }
        private void txt_TextChanged(object sender, RoutedEventArgs e)
        {
            isDirty[sender] = true;
        }
        private void SaveCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e)
        {
            if (isDirty.ContainsKey(sender) && isDirty[sender] == true)
            {
                e.CanExecute = true;
            }
            else
            {
                e.CanExecute = false;
            }             
        }
    }
}
WPF Use Dictionary To Record Which Textbox Has Been Changed And Not Saved








24.13.TextBox
24.13.1.Bind TextBlock to TextBoxBind TextBlock to TextBox
24.13.2.Assign your own class to DataContent and bind to TextBoxAssign your own class to DataContent and bind to TextBox
24.13.3.TextBox: set text, select all, clear, prepend, insert, append, cut, paste, undoTextBox: set text, select all, clear, prepend, insert, append, cut, paste, undo
24.13.4.Set TextBox to editableSet TextBox to editable
24.13.5.Scroll TextBoxScroll TextBox
24.13.6.Use Dictionary to record which textbox has been changed and not savedUse Dictionary to record which textbox has been changed and not saved
24.13.7.Set TextBox ContextMenu to nullSet TextBox ContextMenu to null
24.13.8.TextBox Selection start, end and selected textTextBox Selection start, end and selected text
24.13.9.Scrollable TextBox ColumnScrollable TextBox Column
24.13.10.Check Spelling ErrorCheck Spelling Error