public class Region { public string Name { get ; set ; } public int Index { get ; set ; } public IEnumerable <Region> SubRegions { get ; set ; } } * This source code was highlighted with Source Code Highlighter .public class Region { public string Name { get ; set ; } public int Index { get ; set ; } public IEnumerable <Region> SubRegions { get ; set ; } } * This source code was highlighted with Source Code Highlighter .public class Region { public string Name { get ; set ; } public int Index { get ; set ; } public IEnumerable <Region> SubRegions { get ; set ; } } * This source code was highlighted with Source Code Highlighter .public class Region { public string Name { get ; set ; } public int Index { get ; set ; } public IEnumerable <Region> SubRegions { get ; set ; } } * This source code was highlighted with Source Code Highlighter .public class Region { public string Name { get ; set ; } public int Index { get ; set ; } public IEnumerable <Region> SubRegions { get ; set ; } } * This source code was highlighted with Source Code Highlighter .public class Region { public string Name { get ; set ; } public int Index { get ; set ; } public IEnumerable <Region> SubRegions { get ; set ; } } * This source code was highlighted with Source Code Highlighter .public class Region { public string Name { get ; set ; } public int Index { get ; set ; } public IEnumerable <Region> SubRegions { get ; set ; } } * This source code was highlighted with Source Code Highlighter .public class Region { public string Name { get ; set ; } public int Index { get ; set ; } public IEnumerable <Region> SubRegions { get ; set ; } } * This source code was highlighted with Source Code Highlighter .
public class Region { public string Name { get ; set ; } public int Index { get ; set ; } public IEnumerable <Region> SubRegions { get ; set ; } } * This source code was highlighted with Source Code Highlighter .
パブリック クラス RegionViewModel{パブリックリージョン値{ get ; セット ; }public IEnumerable <RegionViewModel> SubRegions { get { /*...*/ }}}*このソースコードは、 ソースコードハイライターで強調表示されました。
public override bool TryInvokeMember(InvokeMemberBinderバインダ、 オブジェクト [] args、 out オブジェクトの結果){result = _methods.ContainsKey(binder.Name)? _methods [binder.Name] .DynamicInvoke( new [] { this } .Concat(args).ToArray()):InvokeNativeMethod(binder.Name、args);結果= GetResult(結果);trueを 返し ます 。}*このソースコードは、 ソースコードハイライターで強調表示されました。
プライベート クラス MyClass{MyClass _i;パブリック ストリング Name { get ; セット ; }パブリック MyClass Foo(){return _i ?? (_i = 新しい MyClass {Name = "_sdfdsfsdfsfd" });}public IEnumerable <MyClass> GetChilds(){yield return new MyClass();yield return new MyClass();}}[テスト方法]public void TestAddProperties(){var a = new MyClass {Name = "123" };Assert.AreEqual( "123" 、a.Name);動的プロキシ= DynamicProxy.Create(a).AddProperty < bool >( "IsSelected" ).AddProperty( "X" 、_ => x、(_、 value )=> x = value ).AddProperty( "LastName" 、 "FFFF" )proxy.Name = "567" ;proxy.IsSelected = true ;proxy.X = 42;Assert.AreEqual( "567" 、a.Name);Assert.IsTrue(proxy.IsSelected);Assert.AreEqual(42、x);proxy.IsSelected = false ;Assert.IsFalse(proxy.IsSelected);}*このソースコードは、 ソースコードハイライターで強調表示されました。
[テスト方法]public void TestChilds(){var a = new MyClass {Name = "123" };Assert.AreEqual( "123" 、a.Name);Assert.AreEqual( "_sdfdsfsdfsfd" 、a.Foo()。名前);var x = 0;動的プロキシ= DynamicProxy.Create(a).AddProperty < bool >( "IsSelected" ).AddProperty( "X" 、_ => x、(_、 value )=> x = value ).AddProperty( "LastName" 、 "FFFF" ).AddMethod( "Boo" 、 new Func <DynamicProxy <MyClass>、 int 、 string >((m、i)=>((MyClass)m).Name + i.ToString()));proxy.Name = "567" ;proxy.IsSelected = true ;proxy.X = 42;var b = proxy.Foo();b.IsSelected = true ;Assert.AreEqual( "567" 、a.Name);Assert.AreEqual( "5674" 、proxy.Boo(4));Assert.IsTrue(proxy.IsSelected);Assert.AreEqual(42、x);Assert.IsTrue(b.IsSelected);b.IsSelected = false ;Assert.IsTrue(proxy.IsSelected);Assert.IsFalse(b.IsSelected);proxy.LastName = "890" ;var d = proxy.Foo();Assert.AreEqual( "FFFF" 、d.LastName);var d2 = proxy.Foo();d2.LastName = "RRRRR" ;Assert.AreEqual( "567" 、Foo(プロキシ));Assert.AreEqual(d.LastName、d2.LastName);// コロバンを奪って 、完璧なカーストを作ることができますvar c =(MyClass)プロキシ;Assert.AreEqual( "567" 、c.Name);foreach (proxy.GetChilds()のvar child){child.IsSelected = true ;Assert.IsTrue(child.IsSelected);}}*このソースコードは、 ソースコードハイライターで強調表示されました。
[テスト方法]public void TestPropertyChange(){var myClass = new MyClass();var propertyName = string .Empty;動的プロキシ= DynamicProxy.Create(myClass);((INotifyPropertyChanged)プロキシ).PropertyChanged + =(s、a)=> propertyName = a.PropertyName;proxy.Name = "aaaa" ;Assert.AreEqual( "Name" 、propertyName);}*このソースコードは、 ソースコードハイライターで強調表示されました。
パブリック MainWindow(){InitializeComponent();DataContext = this ;Items = new [] {DynamicProxy.Create(CreateRegions()。First())。AddProperty < bool >( "IsSelected" )};}IEnumerable <Region> GetSelectedItems( IEnumerable <dynamic>アイテム){return items.Where(x => x.IsSelected).Concat(items.SelectMany(x => GetSelectedItems(( IEnumerable <dynamic>)x.SubRegions)))。Select(x =>(Region)x);}private void ButtonClick( オブジェクト送信者、RoutedEventArgs e){var res = GetSelectedItems(アイテム).Take(10).ToList();SelectedItems = res;}*このソースコードは、 ソースコードハイライターで強調表示されました。
< Window x:Class = "WpfApplication1.MainWindow"xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:WpfApplication1 = "clr-namespace:WpfApplication1"タイトル = "MainWindow" 高さ = "350" 幅 = "525" >< Window.Resources >< DataTemplate DataType = "{x:Type WpfApplication1:Region}" >< WrapPanel >< TextBlock Text = "{Binding Path = Name、StringFormat = '{} {0}、'}" />< TextBlock Text = "{Binding Path = Index}" /></ WrapPanel ></ DataTemplate ></ Window.Resources >< グリッド >< Grid.ColumnDefinitions >< ColumnDefinition Width = "*" />< ColumnDefinition Width = "auto" />< ColumnDefinition Width = "*" /></ Grid.ColumnDefinitions >< TreeView グリッド 。 列 = "0" ItemsSource = "{Binding Items}" BorderThickness = "0" >< TreeView.ItemTemplate >< HierarchicalDataTemplate ItemsSource = "{Binding SubRegions}" >< CheckBox IsChecked = "{Binding IsSelected、Mode = TwoWay}" Content = "{Binding Value}" /></ HierarchicalDataTemplate ></ TreeView.ItemTemplate ></ TreeView >< ボタンの 内容 =「選択を表示」 VerticalAlignment =「中央」 グリッド 。 列 = "1" クリック = "ButtonClick" />< ListBox グリッド 。 列 = "2" ItemsSource = "{Binding SelectedItems}" BorderThickness = "0" /></ グリッド ></ ウィンドウ >*このソースコードは、 ソースコードハイライターで強調表示されました。
Source: https://habr.com/ru/post/J124078/More articles:更新されたAndroidマーケットのビデオレビューYandex.Metrika APIを使用して統計を表示するQAForum2011-戦いの教義、またはパブロフの犬としてのチームラボGPSレシーバーをラップトップに接続し、GPSトラッカーを作成するマーマレードのAdMob広告を接続します(Android OSの拡張機能)グラフィックをMicrosoft Excelにエクスポート水族館のマウスBlackberry PlayBookアプリケーションのコピー防止eBox-2300SXにSMS Linux(Slackware)をインストールします中国のiPad 3All Articles