WPF VB.Net

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="TwoDocument" Height="300" Width="300">
  
    
  

  
    
      
      
      
      
    

    
      
        
        
        
        
        
        
      
    
    
      
        
      

      
    
  


//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