From 52d3ef051f577fe16347082413a89d1dbb19ac6a Mon Sep 17 00:00:00 2001 From: Eugeniy Gorbovoy Date: Sat, 16 Dec 2017 04:53:39 +0530 Subject: [PATCH 1/4] Improper exception handling demonstration #3888 https://github.com/dotnet/docs/issues/3888 --- .../CSharp/Window1.xaml | 4 +- .../CSharp/Window1.xaml.cs | 54 +++++++++---------- 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/samples/snippets/csharp/VS_Snippets_Wpf/ContentControlTemplateSelector/CSharp/Window1.xaml b/samples/snippets/csharp/VS_Snippets_Wpf/ContentControlTemplateSelector/CSharp/Window1.xaml index 79448eaadecbf..b7258a952d817 100644 --- a/samples/snippets/csharp/VS_Snippets_Wpf/ContentControlTemplateSelector/CSharp/Window1.xaml +++ b/samples/snippets/csharp/VS_Snippets_Wpf/ContentControlTemplateSelector/CSharp/Window1.xaml @@ -24,7 +24,9 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_Wpf/ContentControlTemplateSelector/CSharp/Window1.xaml.cs b/samples/snippets/csharp/VS_Snippets_Wpf/ContentControlTemplateSelector/CSharp/Window1.xaml.cs index acc2605809d9f..ceba538842e48 100644 --- a/samples/snippets/csharp/VS_Snippets_Wpf/ContentControlTemplateSelector/CSharp/Window1.xaml.cs +++ b/samples/snippets/csharp/VS_Snippets_Wpf/ContentControlTemplateSelector/CSharp/Window1.xaml.cs @@ -32,40 +32,40 @@ public Window1() // public class NumderDataTemplateSelector : DataTemplateSelector { + public DataTemplate NumberTemplate { get; set; } + public DataTemplate LargeNumberTemplate { get; set; } + public override DataTemplate SelectTemplate(object item, DependencyObject container) { - string numberStr = item as string; - - if (numberStr != null) - { - int num; - Window win = Application.Current.MainWindow; + //null value will be used in design mode + if (item == null) return null; - try - { - num = Convert.ToInt32(numberStr); - } - catch - { - return null; - } + if (!(item is string numberStr)) + throw new ArgumentNullException(nameof(item), + "This TemplateSelector can be used to format strings only"); - // Select one of the DataTemplate objects, based on the - // value of the selected item in the ComboBox. - if (num < 5) - { - return win.FindResource("numberTemplate") as DataTemplate; - } - else - { - return win.FindResource("largeNumberTemplate") as DataTemplate; - - } + int num; + try + { + num = Convert.ToInt32(numberStr); + } + catch (FormatException formatException) + { + throw new FormatException( + "All strings must be convertible to numbers only", formatException); } - return null; + // Select one of the DataTemplate objects, based on the + // value of the selected item in the ComboBox. + if (num < 5) + { + return NumberTemplate; + } + else + { + return LargeNumberTemplate; + } } - } // } \ No newline at end of file From 59caba0f23c2daced33cfaf98d3b3f515e3726f5 Mon Sep 17 00:00:00 2001 From: Eugeniy Gorbovoy Date: Sat, 16 Dec 2017 05:01:10 +0530 Subject: [PATCH 2/4] Exception handling demonstration removed as unessesary --- .../CSharp/Window1.xaml.cs | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/samples/snippets/csharp/VS_Snippets_Wpf/ContentControlTemplateSelector/CSharp/Window1.xaml.cs b/samples/snippets/csharp/VS_Snippets_Wpf/ContentControlTemplateSelector/CSharp/Window1.xaml.cs index ceba538842e48..de4a20f3f111b 100644 --- a/samples/snippets/csharp/VS_Snippets_Wpf/ContentControlTemplateSelector/CSharp/Window1.xaml.cs +++ b/samples/snippets/csharp/VS_Snippets_Wpf/ContentControlTemplateSelector/CSharp/Window1.xaml.cs @@ -40,21 +40,8 @@ public override DataTemplate SelectTemplate(object item, DependencyObject contai //null value will be used in design mode if (item == null) return null; - if (!(item is string numberStr)) - throw new ArgumentNullException(nameof(item), - "This TemplateSelector can be used to format strings only"); - - int num; - try - { - num = Convert.ToInt32(numberStr); - } - catch (FormatException formatException) - { - throw new FormatException( - "All strings must be convertible to numbers only", formatException); - } - + var num = Convert.ToInt32((string)item); + // Select one of the DataTemplate objects, based on the // value of the selected item in the ComboBox. if (num < 5) From bf783c0927d5acef6d4de98609f7368fa9853fef Mon Sep 17 00:00:00 2001 From: Eugeniy Gorbovoy Date: Tue, 26 Dec 2017 04:27:02 +0530 Subject: [PATCH 3/4] Class name typo and comment formatting --- .../ContentControlTemplateSelector/CSharp/Window1.xaml | 2 +- .../ContentControlTemplateSelector/CSharp/Window1.xaml.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/samples/snippets/csharp/VS_Snippets_Wpf/ContentControlTemplateSelector/CSharp/Window1.xaml b/samples/snippets/csharp/VS_Snippets_Wpf/ContentControlTemplateSelector/CSharp/Window1.xaml index b7258a952d817..52d1db42051eb 100644 --- a/samples/snippets/csharp/VS_Snippets_Wpf/ContentControlTemplateSelector/CSharp/Window1.xaml +++ b/samples/snippets/csharp/VS_Snippets_Wpf/ContentControlTemplateSelector/CSharp/Window1.xaml @@ -24,7 +24,7 @@ - diff --git a/samples/snippets/csharp/VS_Snippets_Wpf/ContentControlTemplateSelector/CSharp/Window1.xaml.cs b/samples/snippets/csharp/VS_Snippets_Wpf/ContentControlTemplateSelector/CSharp/Window1.xaml.cs index de4a20f3f111b..20dc947d1156f 100644 --- a/samples/snippets/csharp/VS_Snippets_Wpf/ContentControlTemplateSelector/CSharp/Window1.xaml.cs +++ b/samples/snippets/csharp/VS_Snippets_Wpf/ContentControlTemplateSelector/CSharp/Window1.xaml.cs @@ -30,14 +30,14 @@ public Window1() } // - public class NumderDataTemplateSelector : DataTemplateSelector + public class NumberDataTemplateSelector : DataTemplateSelector { public DataTemplate NumberTemplate { get; set; } public DataTemplate LargeNumberTemplate { get; set; } public override DataTemplate SelectTemplate(object item, DependencyObject container) { - //null value will be used in design mode + // Null value can be passed by IDE designer if (item == null) return null; var num = Convert.ToInt32((string)item); From 1f4de82be72b36c1d0446cdc0e10ddf1b90a8437 Mon Sep 17 00:00:00 2001 From: Eugeniy Gorbovoy Date: Thu, 11 Jan 2018 12:23:46 +0530 Subject: [PATCH 4/4] #3888 VB fix to match CS code --- .../VisualBasic/Window1.xaml | 4 ++- .../VisualBasic/Window1.xaml.vb | 35 ++++++++----------- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/samples/snippets/visualbasic/VS_Snippets_Wpf/ContentControlTemplateSelector/VisualBasic/Window1.xaml b/samples/snippets/visualbasic/VS_Snippets_Wpf/ContentControlTemplateSelector/VisualBasic/Window1.xaml index d9ebcb3f7a15b..fb3d52ec089e4 100644 --- a/samples/snippets/visualbasic/VS_Snippets_Wpf/ContentControlTemplateSelector/VisualBasic/Window1.xaml +++ b/samples/snippets/visualbasic/VS_Snippets_Wpf/ContentControlTemplateSelector/VisualBasic/Window1.xaml @@ -24,7 +24,9 @@ - + diff --git a/samples/snippets/visualbasic/VS_Snippets_Wpf/ContentControlTemplateSelector/VisualBasic/Window1.xaml.vb b/samples/snippets/visualbasic/VS_Snippets_Wpf/ContentControlTemplateSelector/VisualBasic/Window1.xaml.vb index 01590544c60f5..d64643cb64fea 100644 --- a/samples/snippets/visualbasic/VS_Snippets_Wpf/ContentControlTemplateSelector/VisualBasic/Window1.xaml.vb +++ b/samples/snippets/visualbasic/VS_Snippets_Wpf/ContentControlTemplateSelector/VisualBasic/Window1.xaml.vb @@ -29,36 +29,31 @@ End Class 'Window1 ' -Public Class NumderDataTemplateSelector +Public Class NumberDataTemplateSelector Inherits DataTemplateSelector + Public Property NumberTemplate As DataTemplate + Public Property LargeNumberTemplate As DataTemplate + Public Overrides Function SelectTemplate(ByVal item As Object, _ ByVal container As DependencyObject) As DataTemplate - Dim numberStr As String = item ' - - If Not (numberStr Is Nothing) Then - Dim num As Integer - Dim win As Window = Application.Current.MainWindow + ' Nothing can be passed by IDE designer + if (item Is Nothing) Then + Return Nothing + End If - Try - num = Convert.ToInt32(numberStr) - Catch - Return Nothing - End Try + Dim num = Convert.ToInt32(CStr(item)) - ' Select one of the DataTemplate objects, based on the - ' value of the selected item in the ComboBox. - If num < 5 Then - Return win.FindResource("numberTemplate") ' + ' Select one of the DataTemplate objects, based on the + ' value of the selected item in the ComboBox. + If num < 5 Then + Return NumberTemplate - Else - Return win.FindResource("largeNumberTemplate") ' - End If + Else + Return LargeNumberTemplate End If - Return Nothing - End Function 'SelectTemplate End Class 'NumderDataTemplateSelector '