1
1
using Microsoft . Win32 ;
2
2
using System ;
3
3
using System . Collections . Generic ;
4
+ using System . ComponentModel ;
5
+ using System . Globalization ;
4
6
using System . IO ;
7
+ using System . Runtime . CompilerServices ;
5
8
using System . Runtime . InteropServices ;
6
9
using System . Windows ;
7
10
using System . Windows . Controls ;
8
11
using System . Windows . Data ;
9
12
using System . Windows . Input ;
13
+ using System . Windows . Markup ;
10
14
using System . Windows . Media ;
11
15
using System . Windows . Media . Imaging ;
12
16
@@ -28,7 +32,7 @@ public enum ToolMode
28
32
/// <summary>
29
33
/// Interaction logic for MainWindow.xaml
30
34
/// </summary>
31
- public partial class MainWindow : Window
35
+ public partial class MainWindow : Window , INotifyPropertyChanged
32
36
{
33
37
WriteableBitmap canvasBitmap ;
34
38
WriteableBitmap gridBitmap ;
@@ -73,21 +77,21 @@ public partial class MainWindow : Window
73
77
BlendMode blendMode ;
74
78
75
79
// TEST property binding
76
- private ToolMode myVar = ToolMode . Draw ;
80
+ private ToolMode myVar = ToolMode . Fill ;
77
81
public ToolMode CurrentTool
78
82
{
79
83
get
80
84
{
81
- Console . WriteLine ( "get:" + myVar ) ;
82
- return myVar ; }
83
- set {
84
- Console . WriteLine ( "set:" + value ) ;
85
- myVar = value ; }
85
+ return myVar ;
86
+ }
87
+ set
88
+ {
89
+ myVar = value ;
90
+ OnPropertyChanged ( ) ;
91
+ }
86
92
}
87
93
88
94
89
- //public MyLovelyEnum VeryLovelyEnum { get; set; }
90
-
91
95
public MainWindow ( )
92
96
{
93
97
InitializeComponent ( ) ;
@@ -96,6 +100,7 @@ public MainWindow()
96
100
97
101
void Start ( )
98
102
{
103
+ // needed for binding
99
104
DataContext = this ;
100
105
101
106
// setup background grid
@@ -696,11 +701,9 @@ void OnKeyDown(object sender, KeyEventArgs e)
696
701
{
697
702
case Key . B : // brush
698
703
CurrentTool = ToolMode . Draw ;
699
- Console . WriteLine ( "drawmode" ) ;
700
704
break ;
701
705
case Key . F : // floodfill
702
706
CurrentTool = ToolMode . Fill ;
703
- Console . WriteLine ( "fillmode" ) ;
704
707
break ;
705
708
case Key . LeftShift : // left shift
706
709
lblToolInfo . Content = "Straight Lines" ;
@@ -932,23 +935,25 @@ private void OnToolChanged(object sender, RoutedEventArgs e)
932
935
//Enum.TryParse(tag, out currentTool);
933
936
}
934
937
935
-
938
+ // https://github.com/crclayton/WPF-DataBinding-Example
939
+ public event PropertyChangedEventHandler PropertyChanged;
940
+ private void OnPropertyChanged ( [ CallerMemberName ] string propertyName = null )
941
+ {
942
+ PropertyChanged ? . Invoke ( this , new PropertyChangedEventArgs ( propertyName ) ) ;
943
+ }
936
944
937
945
} // class
938
946
947
+ // https://stackoverflow.com/a/2908885/5452781
939
948
public class EnumBooleanConverter : IValueConverter
940
949
{
941
950
public object Convert ( object value , Type targetType , object parameter , System . Globalization . CultureInfo culture )
942
951
{
943
- Console . WriteLine ( "valueA:" + value ) ;
944
- Console . WriteLine ( "parameter:" + parameter ) ;
945
952
return value ? . Equals ( parameter ) ;
946
953
}
947
954
948
955
public object ConvertBack ( object value , Type targetType , object parameter , System . Globalization . CultureInfo culture )
949
956
{
950
- Console . WriteLine ( "valueB:" + value ) ;
951
- Console . WriteLine ( "parameter:" + parameter ) ;
952
957
return value ? . Equals ( true ) == true ? parameter : Binding . DoNothing ;
953
958
}
954
959
}
0 commit comments