{"id":165273,"date":"2013-01-10T01:26:04","date_gmt":"2013-01-09T21:26:04","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=165273"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=165273","title":{"rendered":"<span class=\"post_title\">\u0421\u0435\u043c\u044c \u043b\u0435\u0442 WPF: \u0447\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c?<\/span>"},"content":{"rendered":"<div class=\"content html_format\">       <i>\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.:<\/i> \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/www.paulstovell.com\/six-years-of-wpf\">Six years of WPF; what&#8217;s changed?<\/a>, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 3 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 2012 \u0433\u043e\u0434\u0430. \u0421\u0435\u0439\u0447\u0430\u0441 WPF \u0443\u0436\u0435 \u043d\u0435 \u0448\u0435\u0441\u0442\u044c, \u0430 \u0441\u0435\u043c\u044c \u043b\u0435\u0442, \u043e\u0434\u043d\u0430\u043a\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c.<\/p>\n<p>   \u0414\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0432 Octopus Deploy \u043d\u0430 \u043f\u043e\u043b\u043d\u0443\u044e \u0441\u0442\u0430\u0432\u043a\u0443 \u044f \u043f\u0440\u043e\u0432\u0451\u043b \u0433\u043e\u0434 \u0437\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043d\u0430 WPF \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u0446\u0435\u043d\u043a\u0438 \u0440\u0438\u0441\u043a\u043e\u0432 \u0434\u043b\u044f \u0442\u0440\u0435\u0439\u0434\u0435\u0440\u043e\u0432 \u0432 \u0438\u043d\u0432\u0435\u0441\u0442\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0431\u0430\u043d\u043a\u0435. \u0414\u043e \u0442\u043e\u0433\u043e \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0430\u043d\u0442\u043e\u043c, \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u0443\u044f\u0441\u044c \u043d\u0430 WPF. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0448\u0435\u0441\u0442\u044c \u043b\u0435\u0442 \u044f \u0436\u0438\u043b \u0438 \u0434\u044b\u0448\u0430\u043b \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0435\u0439, \u0438 \u0432 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u044b\u0441\u043b\u044f\u043c\u0438 \u043e \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u0438 \u0431\u0443\u0434\u0443\u0449\u0435\u043c WPF \u0438 XAML.<\/p>\n<p>   \u0428\u0435\u0441\u0442\u044c \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u0440\u043e <a href=\"http:\/\/www.codeproject.com\/Articles\/15239\/Validation-in-Windows-Presentation-Foundation\">\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e \u0432 WPF<\/a> \u043d\u0430 Code Project. \u0415\u0449\u0451 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b <a href=\"http:\/\/www.codeproject.com\/Articles\/14503\/An-Error-Provider-for-Windows-Presentation-Foundat\">\u0441\u0432\u043e\u0439 error provider, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 IDataErrorInfo<\/a>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u2014 \u0432\u044b \u043d\u0435 \u043f\u043e\u0432\u0435\u0440\u0438\u0442\u0435! \u2014 WPF 3.0 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b IDataErrorInfo. \u041f\u043e\u0437\u0436\u0435 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0430\u0434 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441\u043d\u044b\u043c\u0438 WPF \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438 \u0432\u0440\u043e\u0434\u0435 <a href=\"http:\/\/bindablelinq.codeplex.com\/\">Bindable LINQ<\/a> (<i>\u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e<\/i> \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f WPF, \u0435\u0449\u0451 \u0434\u043e \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u044f Rx) \u0438 <a href=\"http:\/\/code.google.com\/p\/magellan-framework\/\">Magellan<\/a> (MVC \u0434\u043b\u044f WPF \u0430-\u043b\u044f ASP.NET). \u042f \u0434\u0430\u0436\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043b \u0432 \u043a\u043b\u0443\u0431\u0435, \u043f\u043e\u0441\u0432\u044f\u0449\u0451\u043d\u043d\u043e\u043c\u0443 \u043f\u0440\u0435\u0432\u043e\u0437\u043d\u043e\u0441\u0435\u043d\u0438\u044e MVVM \u0438 \u043a\u0438\u0434\u0430\u043d\u0438\u044e \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 Code Project, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u043c \u043a\u0430\u043a WPF Disciples (\u00ab\u041f\u0440\u0438\u0432\u0435\u0440\u0436\u0435\u043d\u0446\u044b WPF\u00bb).<\/p>\n<p>   \u041a\u043e\u0433\u0434\u0430 \u044f \u043e\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u044e\u0441\u044c \u043d\u0430 WPF, \u044f \u0432\u0438\u0436\u0443 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e \u0441 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u043c \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u043b\u0430 \u0438\u0441\u043f\u043e\u0440\u0447\u0435\u043d\u0430 \u043f\u043b\u043e\u0445\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0438, \u0447\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u043e, \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435\u043c \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u042f \u0440\u0430\u0434, \u0447\u0442\u043e \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c.<\/p>\n<p>   \u0412\u043e\u0442 \u043a\u0430\u043a \u0432 \u0434\u0430\u043b\u0451\u043a\u043e\u043c 2006-\u043c \u0433\u043e\u0434\u0443 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u0430 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043e\u043a\u043e\u0448\u043a\u0430 (\u043a\u043e\u0434 \u043f\u043e\u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043d\u0430\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u044f \u0442\u043e\u0433\u0434\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u043b):<\/p>\n<pre><code class=\"xml\">\t&lt;Window x:Class=&quot;PaulStovell.TrialBalance.UserInterface.MainWindow&quot; \t  xmlns=&quot;http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\/presentation&quot; \t  xmlns:x=&quot;http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml&quot; \t  xmlns:tb=&quot;clr-namespace:PaulStovell.TrialBalance.UserInterface&quot; \t  xmlns:tbp=&quot;clr-namespace:PaulStovell.TrialBalance.UserInterface.Providers&quot; \t  xmlns:system=&quot;clr-namespace:System;assembly=mscorlib&quot; \t  Title=&quot;TrialBalance&quot;  \t  WindowState=&quot;Maximized&quot; \t  Width=&quot;1000&quot; \t  Height=&quot;700&quot; \t  Icon=&quot;{StaticResource Image_ApplicationIcon}&quot; \t  Background=&quot;{StaticResource Brush_DefaultWindowBackground}&quot; \t  x:Name=&quot;_this&quot;&gt;     <\/code><\/pre>\n<p> \u0422\u043e\u043b\u044c\u043a\u043e \u0432\u0437\u0433\u043b\u044f\u043d\u0438\u0442\u0435 \u043d\u0430 \u0432\u0441\u0435 \u0446\u0435\u0440\u0435\u043c\u043e\u043d\u0438\u0438! x:Class! \u041f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0451\u043d XML! \u041f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0451\u043d \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043d\u0435\u044f\u0432\u043d\u043e?<\/p>\n<p>   \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0441\u0435\u0439\u0447\u0430\u0441 2013-\u0439 \u0433\u043e\u0434, \u0438 WPF \u0431\u044b\u043b \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c. \u0412\u043e\u0442 \u043a\u0430\u043a \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u0435\u0439\u0447\u0430\u0441:<br \/>   <a name=\"habracut\"><\/a>    <\/p>\n<pre><code class=\"xml\">\t&lt;Window x:Class=&quot;PaulStovell.TrialBalance.UserInterface.MainWindow&quot; \t  xmlns=&quot;http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\/presentation&quot; \t  xmlns:x=&quot;http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml&quot; \t  xmlns:tb=&quot;clr-namespace:PaulStovell.TrialBalance.UserInterface&quot; \t  xmlns:tbp=&quot;clr-namespace:PaulStovell.TrialBalance.UserInterface.Providers&quot; \t  xmlns:system=&quot;clr-namespace:System;assembly=mscorlib&quot; \t  Title=&quot;TrialBalance&quot;  \t  WindowState=&quot;Maximized&quot; \t  Width=&quot;1000&quot; \t  Height=&quot;700&quot; \t  Icon=&quot;{StaticResource Image_ApplicationIcon}&quot; \t  Background=&quot;{StaticResource Brush_DefaultWindowBackground}&quot; \t  x:Name=&quot;_this&quot;&gt;     <\/code><\/pre>\n<p>   \u0412\u0438\u0434\u0438\u0442\u0435 \u0440\u0430\u0437\u043d\u0438\u0446\u0443? \u042f \u0442\u043e\u0436\u0435 \u043d\u0435 \u0432\u0438\u0436\u0443. \u0414\u0430, \u0437\u0430 \u0448\u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0438\u0445 \u043b\u0435\u0442 \u043d\u0438\u043a\u0442\u043e \u043f\u0430\u043b\u044c\u0446\u0435\u043c \u043d\u0435 \u0448\u0435\u0432\u0435\u043b\u044c\u043d\u0443\u043b, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u0434\u0430.<\/p>\n<p>   \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043a\u043e\u0434 \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0438 ASP.NET 2006-\u0433\u043e \u0433\u043e\u0434\u0430 (\u0442\u043e\u0436\u0435 \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0442\u0435\u0445 \u043b\u0435\u0442):<\/p>\n<pre><code class=\"xml\">\t&lt;%@ Page Language=&quot;C#&quot; MasterPageFile=&quot;~\/TrialBalance.Master&quot; AutoEventWireup=&quot;true&quot; EnableViewState=&quot;false&quot; CodeBehind=&quot;Builds.aspx.cs&quot; Inherits=&quot;PaulStovell.TrialBalance.MainWebsite.Builds&quot; Title=&quot;Downloads - TrialBalance&quot; %&gt; \t&lt;asp:Content ID=&quot;Content1&quot; ContentPlaceHolderID=&quot;MainContentPlaceholder&quot; runat=&quot;server&quot;&gt; \t  &lt;asp:PlaceHolder runat=&quot;server&quot; Visible=&quot;false&quot; ID=&quot;_downloadAreaPlaceholder&quot;&gt; \t    &lt;h1&gt;Download&lt;\/h1&gt;     <\/code><\/pre>\n<p> \u041a\u0430\u043a \u044d\u0442\u0430 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0435\u0433\u043e\u0434\u043d\u044f?<\/p>\n<pre><code class=\"xml\">\t@model BuildsViewModel\t \t@section Main { \t  &lt;h1&gt;Download&lt;\/h1&gt; \t}     <\/code><\/pre>\n<p> \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0441\u0442\u0430\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c WPF, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u043d\u0435 \u0431\u044b\u043b\u0438 \u043d\u0435 \u043f\u043e \u0434\u0443\u0448\u0435 ASP.NET Web Forms \u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u0440\u043e\u0434\u0435 View State. \u041d\u043e \u0441\u0435\u0439\u0447\u0430\u0441, \u043a\u043e\u0433\u0434\u0430 \u044f \u043e\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u044e\u0441\u044c \u043d\u0430 \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0439 ASP.NET \u043f\u0443\u0442\u044c, \u044f \u0432\u0438\u0436\u0443 <i>\u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0435<\/i> \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u041e\u0442 \u043c\u043e\u0434\u0435\u043b\u0438 Web Forms \u0434\u043e \u043c\u043e\u0434\u0435\u043b\u0438 MVC, \u043e\u0442 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 ASPX \u0434\u043e Razor \u2014 \u0432 \u043b\u0430\u0433\u0435\u0440\u0435 ASP.NET \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u044c \u0438\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u044f\u043c\u0438.<\/p>\n<p>   \u0412\u043e\u0442 \u043d\u0435\u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 ASP.NET \u0438 \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 WPF:   <\/p>\n<ol>\n<li><b>\u0421\u043e\u0437\u0434\u0430\u043d \u043d\u043e\u0432\u044b\u0439, \u0434\u0440\u0443\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443 \u044f\u0437\u044b\u043a \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438<\/b> (Razor). \u041a\u043e\u0433\u0434\u0430 \u043f\u0438\u0448\u0435\u0448\u044c \u043d\u0430 Razor, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0448\u044c <i>\u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435<\/i>. \u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 XAML <i>\u043d\u0438\u043a\u043e\u0433\u0434\u0430<\/i> \u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u043e \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u044f. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432 ReSharper&#8217;\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u00ab\u0418\u043c\u043f\u043e\u0440\u0442 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0451\u043d\u00bb, \u043e\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0443\u0449\u0438\u043c \u043a\u043e\u0448\u043c\u0430\u0440\u043e\u043c.<\/li>\n<li><b>\u041f\u0440\u0438\u043d\u044f\u0442\u044b \u0434\u0438\u0437\u0430\u0439\u043d-\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b<\/b>. \u0418 \u043d\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0435, \u0447\u0442\u043e \u0432 WPF \u0435\u0441\u0442\u044c MVVM \u2014 \u0434\u0430, WPF \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0431\u0430\u0439\u043d\u0434\u0438\u043d\u0433\u0438, \u043d\u043e \u0432 \u044f\u0434\u0440\u0435 WPF <i>\u043d\u0435\u0442 \u043d\u0438 \u0435\u0434\u0438\u043d\u043e\u0439 \u0444\u0438\u0447\u0438<\/i>, \u0441\u043a\u043e\u043b\u044c-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0449\u0435\u0439 \u0441 MVVM. \u042d\u0442\u043e \u0432\u0441\u0451 \u043f\u0440\u0438\u043b\u0435\u043f\u043b\u0435\u043d\u043e \u0441\u0431\u043e\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 Blend Behaviors \u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438. \u0412 ASP.NET \u0436\u0435 \u0432\u0435\u0441\u044c \u0441\u0442\u044d\u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430 MVC.<\/li>\n<li>\u041f\u043e\u043f\u0430\u043b \u0432 <a href=\"http:\/\/www.codinghorror.com\/blog\/2007\/08\/falling-into-the-pit-of-success.html\">\u043f\u0440\u043e\u043f\u0430\u0441\u0442\u044c \u0443\u0441\u043f\u0435\u0445\u0430<\/a>. \u0412\u044b \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 ASP.NET MVC, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0410 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d WPF \u0431\u0435\u0437 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u2014 \u044d\u0442\u043e \u043f\u0443\u0442\u044c \u043c\u0443\u0447\u0435\u043d\u0438\u0439 \u0438 \u043d\u0435\u0432\u0437\u0433\u043e\u0434.<\/li>\n<li><b>\u041f\u0440\u0438\u043d\u044f\u0442\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u043e\u0441\u0442\u044c<\/b>. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0451 \u0432 ASP.NET MVC \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043e \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u0445 \u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c, \u0438\u0437\u043c\u0435\u043d\u0438\u0432 \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430. \u0413\u043e\u0442\u043e\u0432 \u043f\u043e\u043a\u043b\u044f\u0441\u0442\u044c\u0441\u044f, \u043a\u043e\u043c\u0430\u043d\u0434\u0430 WPF \u0441\u043b\u044b\u0445\u043e\u043c \u043d\u0435 \u0441\u043b\u044b\u0445\u0438\u0432\u0430\u043b\u0430 \u043f\u0440\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b, \u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u0438\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0438\u043c\u0435\u044e\u0442 internal \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b.<\/li>\n<li><b>\u041f\u0440\u0438\u043d\u044f\u0442 \u043e\u043f\u0435\u043d-\u0441\u043e\u0440\u0441<\/b>. ASP.NET \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 jQuery \u0438 JSON.NET, \u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0441 \u0431\u0435\u0441\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u043f\u0435\u043d-\u0441\u043e\u0440\u0441\u043d\u044b\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438. WPF, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043d\u0447\u0430\u0435\u043c\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a MVVM \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432, \u0438 \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043f\u043e\u043b\u043d\u0443\u044e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0442\u0430\u043a\u043e\u0432\u043e\u0433\u043e, \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0438\u0445 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442.<\/li>\n<li><b>\u0421\u0442\u0430\u043b \u043e\u043f\u0435\u043d-\u0441\u043e\u0440\u0441\u043e\u043c<\/b>. \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 ASP.NET MVC \u0431\u044b\u043b\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430, \u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0435\u0441\u044c \u0441\u0442\u0435\u043a ASP.NET \u0441\u0442\u0430\u043b \u043e\u043f\u0435\u043d-\u0441\u043e\u0440\u0441\u043d\u044b\u043c \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f. WPF \u2014 \u043d\u0435\u0442, \u0438, \u043e\u0442\u043a\u0440\u043e\u0432\u0435\u043d\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0432\u044b \u0431\u044b \u0438 \u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043a\u043e\u0434 WPF: <a href=\"http:\/\/www.paulstovell.com\/magellan-page-management\">\u043e\u043d \u0443\u0436\u0430\u0441\u0435\u043d<\/a> (<i>\u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.:<\/i> \u043c\u043e\u0436\u043d\u043e \u043e\u0446\u0435\u043d\u0438\u0442\u044c <a href=\"http:\/\/code-wtf.livejournal.com\/215150.html\">VirtualizingStackPanel<\/a>).<\/li>\n<\/ol>\n<p>   \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0441\u0430\u043c \u0412\u0435\u0431 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0438 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0433\u043b\u0430\u0437\u0430\u0445. \u041d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f CSS? \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 Less \u0438\u043b\u0438 SASS. \u041d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f JavaScript? \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 CoffeeScript \u0438\u043b\u0438 Dart. \u0421\u0435\u0439\u0447\u0430\u0441 \u0432 \u0412\u0435\u0431\u0435 \u0431\u043e\u0433\u0430\u0442\u0430\u044f \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0438\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u0439; \u0438\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 WPF \u043d\u0435 \u0431\u044b\u043b\u043e \u0441 2006-\u0433\u043e \u0433\u043e\u0434\u0430.<\/p>\n<h1><font color=\"blue\">\u042f\u0431\u043b\u043e\u043a\u0438 \u043f\u0440\u043e\u0442\u0438\u0432 \u0430\u043f\u0435\u043b\u044c\u0441\u0438\u043d\u043e\u0432 \u0438 \u0432\u0441\u0451 \u0442\u0430\u043a\u043e\u0435<\/font><\/h1>\n<p>   \u042f \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e ASP.NET \u0438 WPF \u043d\u0435 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e ASP.NET \u043b\u0443\u0447\u0448\u0435 \u2014 \u0431\u044b\u043b\u043e \u0431\u044b \u0433\u043b\u0443\u043f\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 \u043d\u0438\u0445 \u0440\u0430\u0437\u043d\u044b\u0435 \u0446\u0435\u043b\u0438. \u042f \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u043e\u0447\u0443 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u043e\u0434\u0438\u043d \u0437\u0430 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0438\u0435 \u0448\u0435\u0441\u0442\u044c \u043b\u0435\u0442 \u043f\u0440\u043e\u0448\u0451\u043b \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c, \u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f. \u0414\u0443\u043c\u0430\u044e, \u0432\u0441\u0451 \u0434\u0435\u043b\u043e \u0432 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0435 \u0438\u043d\u0432\u0435\u0441\u0442\u0438\u0446\u0438\u0439.<\/p>\n<p>   \u0427\u0442\u043e \u043e\u0431\u0438\u0434\u043d\u043e, \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e WPF \u0432 \u0441\u0432\u043e\u0451 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0447\u0430\u043b \u0432\u0435\u0441\u044c\u043c\u0430 \u0431\u043e\u0434\u0440\u043e. \u0422\u0430\u043a\u0438\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u043a\u0430\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0441\u0442\u0438\u043b\u0438, \u0448\u0430\u0431\u043b\u043e\u043d\u044b, \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0430\u0446\u0438\u044f \u043d\u0430 \u0431\u0430\u0439\u043d\u0434\u0438\u043d\u0433\u0430\u0445 \u0437\u0432\u0443\u0447\u0430\u043b\u0438 \u0440\u0435\u0432\u043e\u043b\u044e\u0446\u0438\u043e\u043d\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0431\u044b\u043b \u043e\u0431\u043d\u0430\u0440\u043e\u0434\u043e\u0432\u0430\u043d \u0410\u0432\u0430\u043b\u043e\u043d (<i>\u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.<\/i> \u043a\u043e\u0434\u043e\u0432\u043e\u0435 \u0438\u043c\u044f WPF).<\/p>\n<p>   \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439. \u0417\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0435\u0432\u044b\u043d\u043e\u0441\u0438\u043c\u043e \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0432\u043d\u044b, \u0438\u043c \u043d\u0435 \u043f\u043e\u043c\u0435\u0448\u0430\u043b\u0430 \u0431\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u044f\u0437\u044b\u043a\u0430. \u0421\u0442\u0438\u043b\u0438 \u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0442\u043e\u0436\u0435 \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0432\u043d\u044b, \u0438 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u0435\u0435 CSS (\u043a\u043e\u0433\u0434\u0430 WPF \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0448\u0435\u043b, \u044f \u043e\u0436\u0438\u0434\u0430\u043b \u043c\u0438\u0440\u0438\u0430\u0434\u044b \u0432\u0435\u0431\u0441\u0430\u0439\u0442\u043e\u0432, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0449\u0438\u0445 \u0432\u044b\u0441\u043e\u043a\u043e\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u043c\u044b WPF, \u043a\u0430\u043a \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0442\u0435\u043c\u044b HTML; \u043d\u043e \u0438\u0445 \u043d\u0435\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e).<\/p>\n<p>   \u0421\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 (bindings) \u043e\u0431\u044b\u0447\u043d\u043e \u041f\u0440\u043e\u0441\u0442\u043e \u0420\u0430\u0431\u043e\u0442\u0430\u044e\u0442 (Just Works), \u043a\u0440\u043e\u043c\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f INotifyPropertyChanged \u0442\u043e\u0436\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 <i>\u0441\u043b\u0438\u0448\u043a\u043e\u043c<\/i> \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0414\u0430\u0442\u0430-\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u044b (data contexts) \u2014 \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u0438\u0434\u0435\u044f, \u043f\u0440\u0430\u0432\u0434\u0430 \u043e\u043d\u0430 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u0440\u043e\u0434\u0435 ContextMenu. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 ICommand \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u0434\u043b\u044f \u0441\u043b\u0443\u0436\u0431\u044b \u0434\u0432\u0443\u043c \u0445\u043e\u0437\u044f\u0435\u0432\u0430\u043c: \u043a\u043e\u043c\u0430\u043d\u0434\u0430 WPF \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u0442 routed commands, \u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 Blend \u2014 \u043f\u0430\u0442\u0442\u0435\u0440\u043d command; \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 ICommand \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0445\u043e\u0440\u043e\u0448\u043e \u043d\u0438 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u043d\u0438 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u043e\u0433\u043e.<\/p>\n<h1><font color=\"blue\">XAML<\/font><\/h1>\n<p>   \u0418 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0432\u0430\u043b \u2014 XAML. \u042f\u0437\u044b\u043a XAML \u0442\u0430\u043a \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u0435\u043d, \u0447\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u0447\u0442\u043e \u043b\u044e\u0434\u044f\u043c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0451\u043c \u043f\u0438\u0441\u0430\u0442\u044c. \u0414\u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f! \u0412 \u043c\u0438\u0440\u0435 \u0440\u043e\u0437\u043e\u0432\u044b\u0445 \u043f\u043e\u043d\u0438 \u0438 \u0440\u0430\u0434\u0443\u0433 \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Blend, \u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440 Visual Studio, \u0438 \u043d\u0438\u043a\u0442\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432\u0438\u0434\u0438\u0442 XAML. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430 \u0434\u0432\u043e\u0440\u0435 2013-\u0439, \u0438 \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 Blend, \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0438\u0448\u0435\u0442 XAML. Visual Studio 2012 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442.<\/p>\n<p>   \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0430\u043c\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 XAML \u043d\u0435 \u0432 \u043f\u043b\u043e\u0445\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445. \u041f\u0440\u043e\u0441\u0442\u043e \u044f\u0437\u044b\u043a \u043d\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438, \u0447\u0442\u043e\u0431\u044b \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438 \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438. \u0418 \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 HTML, XAML \u043d\u0435 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u043d. \u041e\u043d \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u043e\u043d \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u042d\u0442\u043e \u0444\u043e\u0440\u043c\u0430\u0442 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u043e\u0439 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439.<\/p>\n<p>   \u0412\u043e\u0442 \u043b\u0438\u0448\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043c\u043d\u0435 \u043d\u0430 \u0443\u043c \u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 XAML:   <\/p>\n<ol>\n<li>\u041f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0438\u043c\u043f\u043e\u0440\u0442\u044b \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432 \u0438\u043c\u0451\u043d \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0430 \u043d\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0444\u0430\u0439\u043b\u0435.<\/li>\n<li>\u041f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0431\u0430\u0439\u043d\u0434\u0438\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043a \u043c\u0435\u0442\u043e\u0434\u0430\u043c, \u0430 \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.<\/li>\n<li>\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0431\u0430\u0439\u043d\u0434\u0438\u043d\u0433\u0430 \u043a\u043e\u0440\u043e\u0447\u0435 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c\u044b\u043c.<\/li>\n<li>\u041f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 C# \u0438 \u0431\u0443\u043b\u0435\u0432\u0443 \u043b\u043e\u0433\u0438\u043a\u0443 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u043e\u0432 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0447\u0438\u0445.<\/li>\n<li>\u041f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0431\u0443\u043b\u0435\u0432\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u044f\u0432\u043d\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0442\u0440\u0451\u0445\u0437\u043d\u0430\u0447\u043d\u043e\u0435 Visibility \u0431\u0435\u0437 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u0430.<\/li>\n<li>\u0418\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u0432 \u0434\u043b\u044f \u043d\u0435\u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432.<\/li>\n<\/ol>\n<p>   \u041a\u043e\u043c\u0430\u043d\u0434\u0430 ASP.NET \u0441\u043c\u043e\u0433\u043b\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0441\u0435\u0440 (Razor), \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 WPF?<\/p>\n<h1><font color=\"blue\">MVVM<\/font><\/h1>\n<p>   \u0421\u043b\u043e\u0432\u0430\u043c\u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c, \u043a\u0430\u043a \u0443\u0441\u0442\u0430\u043b \u044f \u0441\u043b\u044b\u0448\u0430\u0442\u044c \u043f\u0440\u043e \u044d\u0442\u043e\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043e\u0442 \u0431\u044b\u0432\u0448\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0430 WinForms, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0448\u0438\u043b\u0438, \u0447\u0442\u043e MVVM \u2014 \u0441\u0430\u043c\u044b\u0439 \u0441\u043c\u0430\u043a, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438 Silverlight Unleashed \u0438 \u0431\u044b\u043b\u0438 \u043f\u043e\u0440\u0430\u0436\u0435\u043d\u044b MVVM Light.<\/p>\n<p>   \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0430 <i>\u043a\u0430\u0436\u0434\u043e\u043c<\/i> \u043f\u0440\u043e\u0435\u043a\u0442\u0435 WPF, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043d\u0435 \u0434\u043e\u0432\u0435\u043b\u043e\u0441\u044c \u0432\u0438\u0434\u0435\u0442\u044c, \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0441\u044f \u0448\u0438\u0431\u043a\u043e \u0443\u043c\u043d\u044b\u0439 \u0447\u0443\u0432\u0430\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u043e\u043d \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043c\u0451\u043d, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 MVVM \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0441\u044f \u043a\u0440\u0438\u0432\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0438\u0437 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0430 Code Project. \u0412 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u0432\u043e \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 WPF \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043a\u043b\u0430\u0441\u0441 ViewModelBase, \u043d\u0430\u0431\u0438\u0442\u044b\u0439 \u0434\u043e \u043e\u0442\u043a\u0430\u0437\u0430 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438, \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441-\u0431\u0430\u0440\u0430\u043c\u0438 \u0438 INotifyPropertyChanged. \u041f\u043e\u043a\u0430\u0437 \u0434\u0438\u0430\u043b\u043e\u0433\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 20 \u0440\u0430\u0437 \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u043e\u0434\u0430, \u0447\u0435\u043c \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0432 Button1_Click, \u0438 \u044d\u0442\u043e \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432 \u0442\u043e\u0439 \u0436\u0435 \u043c\u0435\u0440\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u2014 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043b\u044e\u0434\u0435\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 MVVM, \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0440\u0430\u0434\u0438 \u043b\u0443\u0447\u0448\u0435\u0439 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u0438, \u043d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u0438\u0448\u0435\u0442 \u044e\u043d\u0438\u0442-\u0442\u0435\u0441\u0442\u044b \u0434\u043b\u044f \u0432\u044c\u044e-\u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u043a\u0440\u043e\u043c\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u044e\u0442 MVVM \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438.<\/p>\n<p>   \u041f\u0440\u043e MVVM \u0441\u043b\u044b\u0448\u043d\u043e \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0443\u0433\u043b\u0443, \u043d\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 WPF \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043e\u0431\u0440\u0435\u0447\u0451\u043d \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043b\u043e\u0445\u0438\u0445, \u043f\u043b\u043e\u0445\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 WPF \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u043e\u0439\u043c\u0451\u0442, \u043a\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u042d\u0442\u043e \u0434\u043e\u0441\u0430\u0434\u043d\u043e.<\/p>\n<h1><font color=\"blue\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/font><\/h1>\n<p>   \u0412 \u0438\u0442\u043e\u0433\u0435, \u043a\u043e\u0433\u0434\u0430 \u044f \u043e\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u044e\u0441\u044c \u043d\u0430 \u0448\u0435\u0441\u0442\u044c \u043b\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 WPF, \u044f \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u0447\u0442\u043e \u043e\u043d \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0445\u043e\u0440\u043e\u0448\u0438\u0445 \u0438\u0434\u0435\u044f\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b. \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0438 \u043f\u0440\u043e \u043f\u0435\u0440\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 ASP.NET (\u043a\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u043c\u043d\u0438\u0442 \u043f\u0440\u043e Web Parts \u0432 ASP.NET 2.0?)<\/p>\n<p>   \u041d\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435: ASP.NET \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043b. \u0412\u0435\u0431-\u0441\u0442\u0435\u043a \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043b. \u0418\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0434, \u043d\u043e \u0438 \u0444\u0438\u043b\u043e\u0441\u043e\u0444\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b. WPF \u0436\u0435 \u043d\u0435 \u0443\u0432\u0438\u0434\u0435\u043b \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441 2006-\u0433\u043e \u0433\u043e\u0434\u0430.<\/p>\n<p>   \u0411\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043e\u0433\u043e\u0440\u0447\u0430\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u043d\u0435\u0442 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b. \u0412 \u043c\u0438\u0440\u0435 \u0412\u0435\u0431\u0430 ASP.NET \u043a\u043e\u043d\u043a\u0443\u0440\u0438\u0440\u0443\u0435\u0442 \u0441 Ruby \u0438 PHP \u2014 \u0435\u0441\u043b\u0438 \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043e\u0434\u0438\u043d, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439. \u041d\u0430 Windows \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435 \u044f \u043f\u043e \u0441\u0443\u0442\u0438 \u043f\u0440\u0438\u043a\u043e\u0432\u0430\u043d \u043a WPF.<\/p>\n<p>   \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435 \u043e\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 WPF. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0443\u043c\u0430\u0442\u044c, \u0447\u0442\u043e XAML \u2014 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439, \u0447\u0451\u0442\u043a\u0438\u0439, \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u044f\u0437\u044b\u043a. \u042f \u0442\u043e\u0436\u0435 \u0442\u0430\u043a \u0434\u0443\u043c\u0430\u043b \u0432 2006-\u043c, \u0438 \u0435\u0441\u043b\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0432\u0430\u043c \u0432 \u0440\u0430\u0434\u043e\u0441\u0442\u044c, \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e. \u041e\u043d\u0430 \u0441 \u043d\u0430\u043c\u0438 \u043d\u0430\u0434\u043e\u043b\u0433\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b \u043d\u0435\u0442. \u041d\u043e \u0447\u0442\u043e \u0436\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u043d\u044f, \u0442\u043e \u044f \u0440\u0430\u0434, \u0447\u0442\u043e \u0434\u043d\u0438 WPF \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u043f\u043e\u0437\u0430\u0434\u0438, \u0438 \u0447\u0442\u043e \u043c\u043e\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 ASP.NET.<\/p>\n<h1><font color=\"blue\">\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u0430<\/font><\/h1>\n<p>   \u0412\u043e \u043c\u043d\u043e\u0433\u043e\u043c \u044f \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e \u0442\u043e\u0447\u043a\u0443 \u0437\u0440\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u0440\u0430, \u043e\u0434\u043d\u0430\u043a\u043e \u0434\u0435\u0441\u043a\u0442\u043e\u043f \u0432\u0441\u0451 \u0435\u0449\u0451 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043c\u043d\u0435 \u0431\u043b\u0438\u0436\u0435 \u0412\u0435\u0431\u0430, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0432\u0435\u0440\u0435\u043d WPF. \u041d\u043e \u0441\u043c\u043e\u0442\u0440\u044e \u044f \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0430 \u043a\u043e\u0434, \u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0447\u0435\u0433\u043e-\u0442\u043e \u043b\u0443\u0447\u0448\u0435\u0433\u043e\u2026 \u0410 \u043a\u043e\u0433\u0434\u0430 \u0433\u043b\u044f\u0434\u0438\u0448\u044c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0447\u0438\u043a\u0438 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u0430 \u0432 \u043b\u0438\u0446\u0435 Qt, \u0442\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0448\u044c, \u0447\u0442\u043e \u0441\u043a\u043e\u0440\u043e \u043e\u043d\u0438 \u0432 C++ \u0431\u0443\u0434\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0442\u043e, \u043e \u0447\u0451\u043c \u0432 \u043c\u044b \u0432 C# \u0438 \u043c\u0435\u0447\u0442\u0430\u0442\u044c \u043d\u0435 \u043c\u043e\u0433\u043b\u0438. \u041f\u043e\u0447\u0435\u043c\u0443 \u0432 \u044f\u0434\u0440\u0451\u043d\u043e\u043c \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u0435\u0441\u0442\u044c \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u044b\u0439 JSON, \u043f\u0440\u0438\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 JavaScript&#8217;\u043e\u043c, \u0430 \u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u2014 \u044d\u0442\u043e\u0442 \u043c\u043e\u043d\u0441\u0442\u0440\u0443\u043e\u0437\u043d\u044b\u0439 \u0438 \u043d\u0435\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 XAML \u0441 \u043f\u043e\u0440\u0442\u044f\u043d\u043a\u0430\u043c\u0438 \u0438\u0437 \u043c\u0443\u043b\u044c\u0442\u0438\u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432 \u0441 \u043c\u0443\u043b\u044c\u0442\u0438\u0431\u0430\u0439\u043d\u0434\u0438\u043d\u0433\u0430\u043c\u0438 \u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c Setter.Value?<\/p>\n<p>   \u041a\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0430 WPF <i>\u0443 \u0432\u0430\u0441?<\/i> \u0423 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439 MVVM \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a? \u0423 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c ViewModelBase? \u0423 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c BoolToVisibilityConverter \u0438 IsNotNullConverter?<\/p>\n<p>   \u042d\u0445, \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u044b \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442 \u0443 WPF \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f. \u0421\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0439, \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439. \u0422\u043e\u0433\u0434\u0430, \u0431\u044b\u0442\u044c \u043c\u043e\u0436\u0435\u0442, Microsoft \u0437\u0430\u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u043b\u0430\u0441\u044c \u0431\u044b \u043e \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0438 WPF&#8230;          \t\t \t\t\t \t<\/p>\n<div class=\"polling\">\n<form action=\"\/json\/polling\/\" class=\"poll\" method=\"post\">\n<div class=\"poll_title\">\u0412\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 WPF?<\/div>\n<p>  \t\t<input type=\"hidden\" name=\"post_id\" value=\"165273\"\/> \t\t<input type=\"hidden\" name=\"polling_question_id\" value=\"6865\"\/>  \t\t<\/p>\n<table class=\"answer\">\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv36121\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"36121\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv36121\">\u0414\u0430, \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e \u043d\u0430 WPF\/Silverlight<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv36123\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"36123\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv36123\">\u041f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b(\u0430) \u043f\u0430\u0440\u0443 \u0440\u0430\u0437, \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv36125\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"36125\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv36125\">\u041f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b(\u0430) \u043f\u0430\u0440\u0443 \u0440\u0430\u0437, \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv36127\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"36127\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv36127\">\u041d\u0435\u0442<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv36129\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"36129\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv36129\">\u041a\u0442\u043e \u043c\u043d\u0435 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 WPF?<\/label> \t\t\t\t<\/td>\n<\/tr>\n<\/table>\n<p class=\"for_users_only_msg\">\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a href=\"\/login\/\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/p>\n<p class=\"total\">\u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u043e 2 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430. \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043d\u0435\u0442.<\/p>\n<\/p><\/form>\n<form action=\"\/json\/polling\/\" class=\"poll\" method=\"post\">\n<div class=\"poll_title\">\u041a\u0430\u043a \u0432\u044b \u043f\u0438\u0448\u0435\u0442\u0435 \u043d\u0430 WPF?<\/div>\n<p>  \t\t<input type=\"hidden\" name=\"post_id\" value=\"165273\"\/> \t\t<input type=\"hidden\" name=\"polling_question_id\" value=\"6867\"\/>  \t\t<\/p>\n<table class=\"answer\">\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv36131\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"36131\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv36131\">\u0418\u043c\u0435\u044e MVVM \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv36133\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"36133\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv36133\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 MVVM \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a (MVVM Light, Prism, Caliburn \u0438 \u0442.\u043f.)<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv36135\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"36135\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv36135\">\u041a\u0430\u043a\u0438\u0435 \u043a \u0447\u0451\u0440\u0442\u0443 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438? \u0422\u043e\u043b\u044c\u043a\u043e Button1_Click, \u0442\u043e\u043b\u044c\u043a\u043e \u0445\u0430\u0440\u0434\u043a\u043e\u0440!<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv36137\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"36137\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv36137\">\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e Blend \u0438\/\u0438\u043b\u0438 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u0430, \u0432 XAML \u043b\u0435\u0437\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043e\u0441\u0442\u0440\u043e\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv36139\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"36139\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv36139\">\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e (T4, Python \u0438 \u0442.\u043f.)<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv36141\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"36141\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv36141\">\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e, \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u044e \u0444\u0438\u043d\u0442\u044b \u0443\u0448\u0430\u043c\u0438 \u0441 markup extensions, \u043f\u043e\u0442\u043e\u043c\u043a\u0430\u043c\u0438 binding \u0438 \u0442.\u043f.<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv36143\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"36143\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv36143\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043f\u0438\u0441\u0430\u043d\u0438\u043d\u044b (\u043e\u043f\u0438\u0448\u0443 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445)<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv36145\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"36145\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv36145\">\u0410 \u043c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e! \u041c\u0435\u043d\u044c\u0448\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0445 \u043c\u043e\u0439 \u043a\u043e\u0434 \u2014 \u043c\u0435\u043d\u044c\u0448\u0435 \u0448\u0430\u043d\u0441\u043e\u0432 \u0431\u044b\u0442\u044c \u0443\u0432\u043e\u043b\u0435\u043d\u043d\u044b\u043c(\u043e\u0439)!<\/label> \t\t\t\t<\/td>\n<\/tr>\n<\/table>\n<p class=\"for_users_only_msg\">\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a href=\"\/login\/\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/p>\n<p class=\"total\">\u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b 1 \u0447\u0435\u043b\u043e\u0432\u0435\u043a. \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043d\u0435\u0442.<\/p>\n<\/p><\/form>\n<\/p><\/div>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/165273\/\"> http:\/\/habrahabr.ru\/post\/165273\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">       <i>\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.:<\/i> \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/www.paulstovell.com\/six-years-of-wpf\">Six years of WPF; what&#8217;s changed?<\/a>, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 3 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 2012 \u0433\u043e\u0434\u0430. \u0421\u0435\u0439\u0447\u0430\u0441 WPF \u0443\u0436\u0435 \u043d\u0435 \u0448\u0435\u0441\u0442\u044c, \u0430 \u0441\u0435\u043c\u044c \u043b\u0435\u0442, \u043e\u0434\u043d\u0430\u043a\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c.<\/p>\n<p>   \u0414\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0432 Octopus Deploy \u043d\u0430 \u043f\u043e\u043b\u043d\u0443\u044e \u0441\u0442\u0430\u0432\u043a\u0443 \u044f \u043f\u0440\u043e\u0432\u0451\u043b \u0433\u043e\u0434 \u0437\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043d\u0430 WPF \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u0446\u0435\u043d\u043a\u0438 \u0440\u0438\u0441\u043a\u043e\u0432 \u0434\u043b\u044f \u0442\u0440\u0435\u0439\u0434\u0435\u0440\u043e\u0432 \u0432 \u0438\u043d\u0432\u0435\u0441\u0442\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0431\u0430\u043d\u043a\u0435. \u0414\u043e \u0442\u043e\u0433\u043e \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0430\u043d\u0442\u043e\u043c, \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u0443\u044f\u0441\u044c \u043d\u0430 WPF. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0448\u0435\u0441\u0442\u044c \u043b\u0435\u0442 \u044f \u0436\u0438\u043b \u0438 \u0434\u044b\u0448\u0430\u043b \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0435\u0439, \u0438 \u0432 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u044b\u0441\u043b\u044f\u043c\u0438 \u043e \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u0438 \u0431\u0443\u0434\u0443\u0449\u0435\u043c WPF \u0438 XAML.<\/p>\n<p>   \u0428\u0435\u0441\u0442\u044c \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u0440\u043e <a href=\"http:\/\/www.codeproject.com\/Articles\/15239\/Validation-in-Windows-Presentation-Foundation\">\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e \u0432 WPF<\/a> \u043d\u0430 Code Project. \u0415\u0449\u0451 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b <a href=\"http:\/\/www.codeproject.com\/Articles\/14503\/An-Error-Provider-for-Windows-Presentation-Foundat\">\u0441\u0432\u043e\u0439 error provider, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 IDataErrorInfo<\/a>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u2014 \u0432\u044b \u043d\u0435 \u043f\u043e\u0432\u0435\u0440\u0438\u0442\u0435! \u2014 WPF 3.0 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b IDataErrorInfo. \u041f\u043e\u0437\u0436\u0435 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0430\u0434 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441\u043d\u044b\u043c\u0438 WPF \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438 \u0432\u0440\u043e\u0434\u0435 <a href=\"http:\/\/bindablelinq.codeplex.com\/\">Bindable LINQ<\/a> (<i>\u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e<\/i> \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f WPF, \u0435\u0449\u0451 \u0434\u043e \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u044f Rx) \u0438 <a href=\"http:\/\/code.google.com\/p\/magellan-framework\/\">Magellan<\/a> (MVC \u0434\u043b\u044f WPF \u0430-\u043b\u044f ASP.NET). \u042f \u0434\u0430\u0436\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043b \u0432 \u043a\u043b\u0443\u0431\u0435, \u043f\u043e\u0441\u0432\u044f\u0449\u0451\u043d\u043d\u043e\u043c\u0443 \u043f\u0440\u0435\u0432\u043e\u0437\u043d\u043e\u0441\u0435\u043d\u0438\u044e MVVM \u0438 \u043a\u0438\u0434\u0430\u043d\u0438\u044e \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 Code Project, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u043c \u043a\u0430\u043a WPF Disciples (\u00ab\u041f\u0440\u0438\u0432\u0435\u0440\u0436\u0435\u043d\u0446\u044b WPF\u00bb).<\/p>\n<p>   \u041a\u043e\u0433\u0434\u0430 \u044f \u043e\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u044e\u0441\u044c \u043d\u0430 WPF, \u044f \u0432\u0438\u0436\u0443 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e \u0441 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u043c \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u043b\u0430 \u0438\u0441\u043f\u043e\u0440\u0447\u0435\u043d\u0430 \u043f\u043b\u043e\u0445\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0438, \u0447\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u043e, \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435\u043c \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u042f \u0440\u0430\u0434, \u0447\u0442\u043e \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c.<\/p>\n<p>   \u0412\u043e\u0442 \u043a\u0430\u043a \u0432 \u0434\u0430\u043b\u0451\u043a\u043e\u043c 2006-\u043c \u0433\u043e\u0434\u0443 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u0430 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043e\u043a\u043e\u0448\u043a\u0430 (\u043a\u043e\u0434 \u043f\u043e\u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043d\u0430\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u044f \u0442\u043e\u0433\u0434\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u043b):<\/p>\n<pre><code class=\"xml\">\t&lt;Window x:Class=&quot;PaulStovell.TrialBalance.UserInterface.MainWindow&quot; \t  xmlns=&quot;http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\/presentation&quot; \t  xmlns:x=&quot;http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml&quot; \t  xmlns:tb=&quot;clr-namespace:PaulStovell.TrialBalance.UserInterface&quot; \t  xmlns:tbp=&quot;clr-namespace:PaulStovell.TrialBalance.UserInterface.Providers&quot; \t  xmlns:system=&quot;clr-namespace:System;assembly=mscorlib&quot; \t  Title=&quot;TrialBalance&quot;  \t  WindowState=&quot;Maximized&quot; \t  Width=&quot;1000&quot; \t  Height=&quot;700&quot; \t  Icon=&quot;{StaticResource Image_ApplicationIcon}&quot; \t  Background=&quot;{StaticResource Brush_DefaultWindowBackground}&quot; \t  x:Name=&quot;_this&quot;&gt;     <\/code><\/pre>\n<p> \u0422\u043e\u043b\u044c\u043a\u043e \u0432\u0437\u0433\u043b\u044f\u043d\u0438\u0442\u0435 \u043d\u0430 \u0432\u0441\u0435 \u0446\u0435\u0440\u0435\u043c\u043e\u043d\u0438\u0438! x:Class! \u041f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0451\u043d XML! \u041f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0451\u043d \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043d\u0435\u044f\u0432\u043d\u043e?<\/p>\n<p>   \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0441\u0435\u0439\u0447\u0430\u0441 2013-\u0439 \u0433\u043e\u0434, \u0438 WPF \u0431\u044b\u043b \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c. \u0412\u043e\u0442 \u043a\u0430\u043a \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u0435\u0439\u0447\u0430\u0441:   <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-165273","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/165273","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=165273"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/165273\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=165273"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=165273"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=165273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}