Advertisement
theblueeyz

WPF Data Binding WebBrowser - C#

Oct 31st, 2011
2,581
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.68 KB | None | 0 0
  1.     /// <summary>
  2.     /// Interaction logic for BindableWebBrowser.xaml
  3.     /// </summary>
  4.     public partial class BindableWebBrowser : UserControl
  5.     {
  6.         private const string _SkipSourceChange = "Skip";
  7.  
  8.         public BindableWebBrowser()
  9.         {
  10.             InitializeComponent();
  11.  
  12.             CommandBindings.Add(new CommandBinding(NavigationCommands.BrowseBack, BrowseBack, CanBrowseBack));
  13.             CommandBindings.Add(new CommandBinding(NavigationCommands.BrowseForward, BrowseForward, CanBrowseForward));
  14.             CommandBindings.Add(new CommandBinding(NavigationCommands.Refresh, Refresh, TrueCanExecute));
  15.         }
  16.  
  17.  
  18.         public string BindableSource
  19.         {
  20.             get { return (string)GetValue(BindableSourceProperty); }
  21.             set { SetValue(BindableSourceProperty, value); }
  22.         }
  23.  
  24.         public bool ShouldHandleNavigated
  25.         {
  26.             get { return (bool)GetValue(ShouldHandleNavigatedProperty); }
  27.             set { SetValue(ShouldHandleNavigatedProperty, value); }
  28.         }
  29.  
  30.         public static readonly DependencyProperty BindableSourceProperty =
  31.                                                         DependencyProperty.RegisterAttached(
  32.                                                                 "BindableSource",
  33.                                                                 typeof(string),
  34.                                                                 typeof(BindableWebBrowser));
  35.  
  36.         public static readonly DependencyProperty ShouldHandleNavigatedProperty =
  37.                                                         DependencyProperty.RegisterAttached(
  38.                                                                 "ShouldHandleNavigated",
  39.                                                                 typeof(Boolean),
  40.                                                                 typeof(BindableWebBrowser));
  41.  
  42.         protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
  43.         {
  44.             base.OnPropertyChanged(e);
  45.  
  46.             if (e.Property == BindableSourceProperty)
  47.             {
  48.                 BindableSourcePropertyChanged(e);
  49.             }
  50.             else if (e.Property == ShouldHandleNavigatedProperty)
  51.             {
  52.                 ShouldHandleNavigatedPropertyChanged(e);
  53.             }
  54.         }
  55.  
  56.         public void ShouldHandleNavigatedPropertyChanged(DependencyPropertyChangedEventArgs e)
  57.         {
  58.             if (browser != null)
  59.             {
  60.                 if ((bool)e.NewValue)
  61.                 {
  62.                     browser.Navigated += new NavigatedEventHandler(Browser_Navigated);
  63.                 }
  64.                 else
  65.                 {
  66.                     browser.Navigated -= new NavigatedEventHandler(Browser_Navigated);
  67.                 }
  68.             }
  69.         }
  70.  
  71.         public void BindableSourcePropertyChanged(DependencyPropertyChangedEventArgs e)
  72.         {
  73.             if (browser != null)
  74.             {
  75.                 string uri = e.NewValue as string;
  76.                 if (!_SkipSourceChange.Equals(browser.Tag))
  77.                 {
  78.                     browser.Source = !string.IsNullOrEmpty(uri) ? new Uri(uri) : null;
  79.  
  80.                     //Or, if you prefer...
  81.                     //webBrowser.NavigateToString((string)e.NewValue);
  82.                 }
  83.             }
  84.         }
  85.  
  86.         private void Browser_Navigated(object sender, NavigationEventArgs e)
  87.         {
  88.             WebBrowser browser = sender as WebBrowser;
  89.             if (browser != null)
  90.             {
  91.                 if (BindableSource != e.Uri.ToString())
  92.                 {
  93.                     browser.Tag = _SkipSourceChange;
  94.                     this.BindableSource = browser.Source.AbsoluteUri;
  95.                     browser.Tag = null;
  96.                 }
  97.             }
  98.         }
  99.  
  100.         private void CanBrowseBack(object sender, CanExecuteRoutedEventArgs e)
  101.         {
  102.             e.CanExecute = browser.CanGoBack;
  103.         }
  104.  
  105.         private void BrowseBack(object sender, ExecutedRoutedEventArgs e)
  106.         {
  107.             browser.GoBack();
  108.         }
  109.  
  110.         private void CanBrowseForward(object sender, CanExecuteRoutedEventArgs e)
  111.         {
  112.             e.CanExecute = browser.CanGoForward;
  113.         }
  114.  
  115.         private void BrowseForward(object sender, ExecutedRoutedEventArgs e)
  116.         {
  117.             browser.GoForward();
  118.         }
  119.  
  120.         private void TrueCanExecute(object sender, CanExecuteRoutedEventArgs e) { e.CanExecute = true; }
  121.  
  122.         private void Refresh(object sender, ExecutedRoutedEventArgs e)
  123.         {
  124.             try { browser.Refresh(); }
  125.             catch (Exception ex) { Console.WriteLine(ex.ToString()); }
  126.         }
  127.     }
  128.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement