Custom Dialog with data binding : Binding « Windows Presentation Foundation « C# / CSharp Tutorial

<Window x:Class="CustomDialogSample.SettingsDialog"
  FocusManager.FocusedElement="{Binding ElementName=myStringTextBox}"

    <Label Target="{Binding ElementName=myStringTextBox}">Report _Folder</Label>
    <TextBox x:Name="myStringTextBox" Text="{Binding MyString}" />
    <Button x:Name="folderBrowseButton">...</Button>
    <Button HorizontalAlignment="Left" Name="reportColorButton">
      <Rectangle Width="15" Height="15" SnapsToDevicePixels="True"
                   Fill="{StaticResource reportBrush}" />
        <AccessText Text="Report _Color..." Margin="10,0,0,0" />
    <Button x:Name="okButton" IsDefault="True">OK</Button>
    <Button x:Name="cancelButton" IsCancel="True">Cancel</Button>
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;
using System.ComponentModel;

namespace CustomDialogSample {
    class DialogData : INotifyPropertyChanged {
      Color reportColor;
      public Color MyColor {
        get { return reportColor; }
        set { reportColor = value; Notify("MyColor"); }

      string mystring;
      public string MyString {
        get { return mystring; }
        set { mystring = value; Notify("MyString"); }

      public event PropertyChangedEventHandler PropertyChanged;
      void Notify(string prop) { if( PropertyChanged != null ) { PropertyChanged(this, new PropertyChangedEventArgs(prop)); } }
  public partial class SettingsDialog : System.Windows.Window {
    DialogData data = new DialogData();

    public Color MyColor {
      get { return data.MyColor; }
      set { data.MyColor = value; }

    public string MyString {
      get { return data.MyString; }
      set { data.MyString = value; }

    public SettingsDialog() {

      DataContext = data;

      reportColorButton.Click += reportColorButton_Click;
      folderBrowseButton.Click += folderBrowseButton_Click;
      okButton.Click += new RoutedEventHandler(okButton_Click);

    void okButton_Click(object sender, RoutedEventArgs e) {
      DialogResult = true;
    void reportColorButton_Click(object sender, RoutedEventArgs e) {
      System.Windows.Forms.ColorDialog dlg = new System.Windows.Forms.ColorDialog();
      Color color = MyColor;
      dlg.Color = System.Drawing.Color.FromArgb(color.A, color.R, color.G, color.B);

      if( dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK ) {
        MyColor = Color.FromArgb(dlg.Color.A, dlg.Color.R, dlg.Color.G, dlg.Color.B);

    void folderBrowseButton_Click(object sender, RoutedEventArgs e) {
      System.Windows.Forms.FolderBrowserDialog dlg = new System.Windows.Forms.FolderBrowserDialog();
      dlg.SelectedPath = MyString;
      if( dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK ) {
        MyString = dlg.SelectedPath;

WPF Custom Dialog With Data Binding

24.129.1.Bind to Window itselfBind to Window itself
24.129.2.Two level path bindingTwo level path binding
24.129.3.Bind RelativeSource's AncestorTypeBind RelativeSource's AncestorType
24.129.4.Bind RelativeSource's AncestorType's PathBind RelativeSource's AncestorType's Path
24.129.5.Bind Stroke Thickness to SliderBind Stroke Thickness to Slider
24.129.6.Desktop to ControlDesktop to Control
24.129.7.Binding With Data ContextBinding With Data Context
24.129.8.Long Binding PathLong Binding Path
24.129.9.Bind ListBox ItemsSource to DayNames property of DateTimeFormatInfoBind ListBox ItemsSource to DayNames property of DateTimeFormatInfo
24.129.10.Bind TextBlock Text to SelectedItem property of ListBoxBind TextBlock Text to SelectedItem property of ListBox
24.129.11.Binding FontFamily / FontSize value for current ControlBinding FontFamily / FontSize value for current Control
24.129.12.Bind to IDataErrorInfoBind to IDataErrorInfo
24.129.13.DataTemplate for bindingDataTemplate for binding
24.129.14.Binding Environment InfoBinding Environment Info
24.129.15.Bind to an ADO.NETDataSetBind to an ADO.NETDataSet
24.129.16.Add a value converter to a binding using XAMLAdd a value converter to a binding using XAML
24.129.17.Custom Dialog with data bindingCustom Dialog with data binding
24.129.18.One way and two way bindingOne way and two way binding
24.129.19.Object BindingObject Binding
24.129.20.Without BindingWithout Binding
24.129.21.Master Detail BindingMaster Detail Binding
24.129.22.Data binding using collections composed of mixed types of data.Data binding using collections composed of mixed types of data.
24.129.23.List BindingList Binding
24.129.24.Async bindingAsync binding
24.129.25.Hierarchical Binding for three level nested objectsHierarchical Binding for three level nested objects
24.129.27.Bind to enum typesBind to enum types
24.129.28.Bind to a MethodBind to a Method
24.129.29.Bind an ItemsControl to the CollectionViewSource, Set its DisplayMemberPath to display the Name propertyBind an ItemsControl to the CollectionViewSource, Set its DisplayMemberPath to display the Name property
24.129.30.Bind to the Values of an EnumerationBind to the Values of an Enumeration
24.129.31.Bind to an Existing Object InstanceBind to an Existing Object Instance
24.129.32.Digital ClockDigital Clock
24.129.33.Formatted Digital ClockFormatted Digital Clock
24.129.34.Manual Update TargetManual Update Target