<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://dev.net.ua/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang=""><title type="html">Андрей</title><subtitle type="html" /><id>http://dev.net.ua/blogs/servicedeveloper/atom.aspx</id><link rel="alternate" type="text/html" href="http://dev.net.ua/blogs/servicedeveloper/default.aspx" /><link rel="self" type="application/atom+xml" href="http://dev.net.ua/blogs/servicedeveloper/atom.aspx" /><generator uri="http://communityserver.org" version="2.1.60809.935">Community Server</generator><updated>2008-02-10T20:46:00Z</updated><entry><title>Реализация биндинга во FlowDocument</title><link rel="alternate" type="text/html" href="http://dev.net.ua/blogs/servicedeveloper/archive/2008/11/12/7165.aspx" /><id>http://dev.net.ua/blogs/servicedeveloper/archive/2008/11/12/7165.aspx</id><published>2008-11-12T08:16:00Z</published><updated>2008-11-12T08:16:00Z</updated><content type="html">&lt;P&gt;Известно, что подключить прямой биндинг на свойство &lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;Run&lt;/FONT&gt;&lt;/FONT&gt;.Text нельзя из-за того, что оно не является свойством зависимости. Поэтому народ как только не изощряется, чтобы организовать биндинг во &lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;FlowDocument&lt;/FONT&gt;&lt;/FONT&gt;. &lt;/P&gt;
&lt;P&gt;Одно, из таких изощрений, которым пользуюсь я — подключение обратного биндинга (в режиме OneWayToSource или TwoWay). &lt;/P&gt;
&lt;P&gt;Пример того, как это делается можно посмотреть &lt;A href="http://www.regul.nm.ru/XAML/Binding.xaml"&gt;здесь&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=7165" width="1" height="1"&gt;</content><author><name>ServiceDeveloper</name><uri>http://dev.net.ua/members/ServiceDeveloper.aspx</uri></author><category term="FlowDocument" scheme="http://dev.net.ua/blogs/servicedeveloper/archive/tags/FlowDocument/default.aspx" /><category term="XAML" scheme="http://dev.net.ua/blogs/servicedeveloper/archive/tags/XAML/default.aspx" /></entry><entry><title>В WPF появился DataGrid</title><link rel="alternate" type="text/html" href="http://dev.net.ua/blogs/servicedeveloper/archive/2008/09/03/6829.aspx" /><id>http://dev.net.ua/blogs/servicedeveloper/archive/2008/09/03/6829.aspx</id><published>2008-09-03T11:51:00Z</published><updated>2008-09-03T11:51:00Z</updated><content type="html">&lt;P&gt;Приятный сюрприз после отпуска, с выходом NET 3.5 SP1 появилась возможность использовать WPF-ный DataGrid.&lt;/P&gt;
&lt;P&gt;Насколько мне известно, Выход SP1 состоялся 11 августа, а 12-го выложили&amp;nbsp;&lt;A href="http://www.codeplex.com/wpf/Release/ProjectReleases.aspx?ReleaseId=14963"&gt;WPFToolkit.dll&lt;/A&gt;, правда ещё только CTP. Но MS божится, что скоро будет окончательный релиз.&lt;/P&gt;
&lt;P&gt;Сегодня оторвался от дел, нетерпелось пощупать долгожданный всеми контрол. Времени было немного, но в основном я остался доволен.&lt;/P&gt;
&lt;P&gt;Далее приводится короткое описание использования&amp;nbsp;&amp;nbsp;этого контрола полученное мною методом тыка &lt;img src="http://dev.net.ua/emoticons/emotion-1.gif" alt="Smile" /&gt;.&lt;/P&gt;
&lt;P&gt;1. Скачиваем DLL.&lt;BR&gt;2. Разархивируем и суём куда-нибудь.&lt;BR&gt;3. Создаем тестовое WPF приложение (обязательно SP1).&lt;BR&gt;4. В Solution Explorer -&amp;gt; References добавляем ссылку на либу.&lt;BR&gt;5. Создаём источник для DataGrid:&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;class&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyClass&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Field1 { &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;get&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;set&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;; }&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Field2 { &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;get&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;set&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;; }&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Field3 { &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;get&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;set&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;; }&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;class&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyClasses&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; : System.Collections.ObjectModel.&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;ObservableCollection&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyClass&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;gt;&lt;BR&gt;{&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;6. Создаём простенькую разметку:&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Window&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; x&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;Class&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="WpfApplicationSP1test.Window1"&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;xmlns&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;A href="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&lt;/A&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;xmlns&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;x&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;A href="http://schemas.microsoft.com/winfx/2006/xaml"&gt;http://schemas.microsoft.com/winfx/2006/xaml&lt;/A&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;xmlns&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;l&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="clr-namespace:WpfApplicationSP1test"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;xmlns&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;dg&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="clr-namespace:Microsoft.Windows.Controls;assembly=WpfToolkit"&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;Title&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="Тестовое приложение&amp;nbsp;SP1"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; Height&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="275"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; Width&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="474"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; WindowStartupLocation&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="CenterScreen"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; Name&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="window1"&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Window.Resources&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;l&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;MyClasses&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; x&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;Key&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="dgSource"/&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Window.Resources&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;DockPanel&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;ToolBar&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; DockPanel.Dock&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="Top"&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Button&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; Name&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="Load"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; Content&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="Загрузить"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; Click&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="Load_Click"/&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Button&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; Name&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="Save"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; Content&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="‘Сохранить"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; Click&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="Save_Click"/&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Separator&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; Margin&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="4,0,4,0"/&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Button&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; Name&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="Add"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; Content&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="Добавить"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; Click&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="Add_Click"/&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;ToolBar&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;dg&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;DataGrid&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; DockPanel.Dock&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="Top"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; Name&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="dataGrid"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; DataContext&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="{&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;DynamicResource&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; dgSource&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;}"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; ItemsSource&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="{&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Binding&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;}"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; AutoGenerateColumns&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="True"/&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;DockPanel&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Window&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000 size=2&gt;7.&amp;nbsp;Пишем обработчики событий в отделённом коде:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;private&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Load_Click(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;object&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sender, &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;RoutedEventArgs&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; e)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;var&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; fs = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; System.IO.&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;FileStream&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"dgSource.XAML"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;, System.IO.&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;FileMode&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;.Open);&lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;var&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; dgSource = System.Windows.Markup.&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;XamlReader&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;.Load(fs) &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyClasses&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;;&lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; (dgSource == &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;) &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;return&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;;&lt;BR&gt;&amp;nbsp;window1.Resources.Remove(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"dgSource"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;);&lt;BR&gt;&amp;nbsp;window1.Resources.Add(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"dgSource"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;, dgSource);&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;private&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Save_Click(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;object&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sender, &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;RoutedEventArgs&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; e)&lt;BR&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;var&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; dgSource = window1.FindResource(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"dgSource"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;) &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyClasses&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; (dgSource == &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;) &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;return&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;var&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; fs = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; System.IO.&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;FileStream&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"dgSource.XAML"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;, System.IO.&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;FileMode&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;.Create);&lt;BR&gt;&amp;nbsp;System.Windows.Markup.&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;XamlWriter&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;.Save(dgSource, fs);&lt;BR&gt;&amp;nbsp;fs.Close();&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;private&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Add_Click(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;object&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; sender, &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;RoutedEventArgs&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; e)&lt;BR&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;var&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; dgSource = dataGrid.ItemsSource &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyClasses&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; (dgSource == &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;) &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;return&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;;&lt;BR&gt;&amp;nbsp;dgSource.Add(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyClass&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;());&lt;BR&gt;}&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;8. Компилируем и запускаем на выполнение.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Что понравилось:&lt;BR&gt;1. С источниками данных работает также, как и ListBox (может быть есть и другие варианты, пока ещё не смотрел).&lt;BR&gt;2. Без&amp;nbsp;лишних телодвижений работает сортировка столбцов (в том числе и&amp;nbsp;по нескольким столбцам&amp;nbsp;при нажатом Shift).&lt;BR&gt;3. Нормально работает прямой и обратный (на источник) биндинг, поэтому легко управлять данными, манипулируя непосредственно источником. Не требуются всякие там AcceptText... &lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#000000&gt;Не понравилось:&lt;BR&gt;Удаление строк клавишей &amp;lt;Del&amp;gt;. По моему мнению это не очень удобно и может привести к путанице при редактировании ячеек. К примеру, пользователь при вводе данных ошибся, при помощи &amp;lt;Del&amp;gt; что-то удалил, нажал &amp;lt;Enter&amp;gt;, а потом решил что-то доудалить и ещё раз нажал &amp;lt;Del&amp;gt;, после чего исчезнет вся редактируемая строка. Надеюсь, что это можно как-то переопределить, попробую поколдовать с туннелированными событиями.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#000000&gt;Но в целом впечатление очень даже приятное, планирую в ближайшее время серьёзно заняться изучением этого контрола. Если сообщество проявит интерес, кое-что могу запостить и сюда.&lt;/P&gt;
&lt;P&gt;PS. Если&amp;nbsp;хотите проинициализировать столбцы вручную, нужно&amp;nbsp;перевести &lt;FONT color=#ff0000&gt;AutoGenerateColumns&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="False"&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;и прописать:&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;dg&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;DataGrid&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; DockPanel.Dock&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="Top"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; Name&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="dataGrid"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; DataContext&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="{&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;DynamicResource&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; dgSource&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;}"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; ItemsSource&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="{&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Binding&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;}"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; AutoGenerateColumns&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="False"&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;dg&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;DataGrid.Columns&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;dg&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;DataGridTextColumn&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; Header&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="Первое поле"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; DataFieldBinding&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="{&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Binding&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; Field1&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;}"/&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;dg&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;DataGridTextColumn&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; Header&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="Второе поле"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; DataFieldBinding&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="{&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Binding&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; Field2&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;}"/&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;dg&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;DataGridTextColumn&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; Header&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="Третье поле"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; DataFieldBinding&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;="{&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Binding&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt; Field3&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;}"/&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;dg&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;DataGrid.Columns&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;dg&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;DataGrid&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;STRONG&gt;PS. Внимание всем, кто&amp;nbsp;до сих пор просматривает этот блог!&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000 size=2&gt;Вышел октябрьский релиз &lt;A href="http://www.codeplex.com/wpf/Release/ProjectReleases.aspx?ReleaseId=15598"&gt;WPFToolkit&lt;/A&gt;. В отличие от CTP, релиз&amp;nbsp;инсталлируется через MSI. После инсталляции в тулбоксе VS 2008 SP1&amp;nbsp;появляется вкладка &lt;STRONG&gt;WPF Toolkit&lt;/STRONG&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=6829" width="1" height="1"&gt;</content><author><name>ServiceDeveloper</name><uri>http://dev.net.ua/members/ServiceDeveloper.aspx</uri></author><category term="WPF WPFToolkit" scheme="http://dev.net.ua/blogs/servicedeveloper/archive/tags/WPF+WPFToolkit/default.aspx" /></entry><entry><title>Биндинг RichTextBox на FlowDocument</title><link rel="alternate" type="text/html" href="http://dev.net.ua/blogs/servicedeveloper/archive/2008/06/01/6216.aspx" /><id>http://dev.net.ua/blogs/servicedeveloper/archive/2008/06/01/6216.aspx</id><published>2008-06-01T12:08:00Z</published><updated>2008-06-01T12:08:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;Однажды мне пришлось работать с классом, упрощённое описание которого выглядит так:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Arial&gt; &lt;/P&gt;
&lt;P align=justify&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;public&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;class&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;SPAN&gt;Test&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P align=justify&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;nbsp;public&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;string&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; TestText&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&amp;nbsp;{&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;nbsp; get&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; if&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; (TestDocument == &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;null&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;) &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;return&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;"Документ не определён"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; return&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;new&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;TextRange&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;(TestDocument.ContentStart, TestDocument.ContentEnd).Text;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&amp;nbsp;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;nbsp;public&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;FlowDocument&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; TestDocument { &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;get&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;set&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;; }&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;

&lt;P&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;Нужно было&amp;nbsp;представить &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;ObservableCollection&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;Test&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt; таким образом, чтобы в одной части окна в &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;ListBox&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt; отображалась некая информация о документах (в нашем случае — это TestText), а в другой части окна в &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;RichTextBox&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt; представлялась возможность редактирования документа текущего экземпляра &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;Test&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P align=justify&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;Упрощённое визуальное представление этой задачи можно описать так:&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;&lt;FONT color=#a31515 size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;DockPanel&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&lt;FONT size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;ToolBar&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt; DockPanel.Dock&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="Top"&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt; Name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="toolBar1"&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt; Width&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="Auto"&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;Button&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt; Name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="Add"&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt; Content&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="Добавить"&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt; Click&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="Add_Click"/&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;Button&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt; Name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="Delete"&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt; Content&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="Удалить"&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt; Click&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="Delete_Click"/&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;ToolBar&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;Grid&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt; DockPanel.Dock&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="Top"&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt; Height&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="Auto"&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;Grid.ColumnDefinitions&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;ColumnDefinition&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;/&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;ColumnDefinition&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;/&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;Grid.ColumnDefinitions&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;ListBox&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt; Name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="listTests"&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt; Grid.Column&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="0"&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt; ItemsSource&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="{&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;Binding&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;}"&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt; IsSynchronizedWithCurrentItem&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="True"&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;ListBox.ItemTemplate&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;DataTemplate&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt; DataType&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="local:Test"&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;TextBlock&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt; Text&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="{&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;Binding&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt; TestText&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;}"/&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;DataTemplate&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;ListBox.ItemTemplate&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;ListBox&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;GridSplitter&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt; Width&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="5"&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt; Grid.Column&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="1"&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt; HorizontalAlignment&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="Left"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&lt;/P&gt;

&lt;FONT color=#a31515&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;nbsp; &amp;lt;!--&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;BR&gt;&lt;FONT color=#008000&gt;&lt;FONT size=2&gt;&amp;nbsp; &amp;lt;RichTextBox Name="testBox" Grid.Column="1" Margin="5,0,0,0" Document="{Binding TestDocument}"/&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;FONT size=2&gt;&amp;nbsp; &amp;nbsp;--&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;Grid&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;DockPanel&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P align=justify&gt;
&lt;P align=justify&gt;
&lt;P align=justify&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;Как видим, для выполнения этой задачи необходимо решить две проблемы:&lt;/FONT&gt;&lt;/FONT&gt; 
&lt;P align=justify&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;1. Связать RichTextBox.Document с TestDocument текущего экземпляра &lt;FONT color=#2b91af&gt;&lt;SPAN&gt;Test&lt;/SPAN&gt;&lt;/FONT&gt; приблизительно так, как написано в комментарии. Но такое описание недопустимо потому, что RichTextBox.Document не является &lt;FONT color=#2b91af&gt;&lt;SPAN&gt;DependencyProperty&lt;/SPAN&gt;&lt;/FONT&gt;.&lt;/FONT&gt;&lt;/FONT&gt; 
&lt;P align=justify&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;2. Синхронизировать вводимые в &lt;FONT color=#2b91af&gt;&lt;SPAN&gt;RichTextBox&lt;/SPAN&gt;&lt;/FONT&gt; данные с&amp;nbsp;информацией о&amp;nbsp;документе в &lt;FONT color=#2b91af&gt;&lt;SPAN&gt;ListBox&lt;/SPAN&gt;&lt;/FONT&gt;. Эта проблема возникает потому, что при редактировании документа в &lt;FONT color=#2b91af&gt;&lt;SPAN&gt;RichTextBox&lt;/SPAN&gt;&lt;/FONT&gt; меняется только содержимое документа. Экземпляр документа при этом остаётся прежним.&lt;/FONT&gt;&lt;/FONT&gt; 
&lt;P align=justify&gt;
&lt;P align=justify&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;Решение первой проблемы заключается в создании наследника от &lt;FONT color=#2b91af&gt;&lt;SPAN&gt;RichTextBox&lt;/SPAN&gt;&lt;/FONT&gt;, который бы сделал свойство Document свойством зависимости:&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;class&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;DocumentBox&lt;/FONT&gt;&lt;FONT size=2&gt; : &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;RichTextBox&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;{&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;protected&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;override&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;FONT size=2&gt; OnTextChanged(&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;TextChangedEventArgs&lt;/FONT&gt;&lt;FONT size=2&gt; e)&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;if&lt;/FONT&gt;&lt;FONT size=2&gt; (e.Changes.Count &amp;gt; 0) changedIndicator = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;FONT size=2&gt;;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; base&lt;/FONT&gt;&lt;FONT size=2&gt;.OnTextChanged(e);&lt;BR&gt;&amp;nbsp;}&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;bool&lt;/FONT&gt;&lt;FONT size=2&gt; ResetChangedIndicator()&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; var&lt;/FONT&gt;&lt;FONT size=2&gt; retValue = changedIndicator;&lt;BR&gt;&amp;nbsp; changedIndicator = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;false&lt;/FONT&gt;&lt;FONT size=2&gt;;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; return&lt;/FONT&gt;&lt;FONT size=2&gt; retValue;&lt;BR&gt;&amp;nbsp;}&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;protected&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;override&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;FONT size=2&gt; OnPropertyChanged(&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;DependencyPropertyChangedEventArgs&lt;/FONT&gt;&lt;FONT size=2&gt; e)&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; if&lt;/FONT&gt;&lt;FONT size=2&gt; (e.Property == DocumentProperty) &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;base&lt;/FONT&gt;&lt;FONT size=2&gt;.Document = Document;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; base&lt;/FONT&gt;&lt;FONT size=2&gt;.OnPropertyChanged(e);&lt;BR&gt;&amp;nbsp;}&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;FlowDocument&lt;/FONT&gt;&lt;FONT size=2&gt; Document&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; get&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT size=2&gt; ((&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;FlowDocument&lt;/FONT&gt;&lt;FONT size=2&gt;)GetValue(DocumentProperty) == &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;FONT size=2&gt;) &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;return&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;FlowDocument&lt;/FONT&gt;&lt;FONT size=2&gt;();&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;return&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;FlowDocument&lt;/FONT&gt;&lt;FONT size=2&gt;)GetValue(DocumentProperty);&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; set&lt;/FONT&gt;&lt;FONT size=2&gt; { SetValue(DocumentProperty, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;value&lt;/FONT&gt;&lt;FONT size=2&gt;); }&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;nbsp;}&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;static&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;readonly&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;DependencyProperty&lt;/FONT&gt;&lt;FONT size=2&gt; DocumentProperty = &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;DependencyProperty&lt;/FONT&gt;&lt;FONT size=2&gt;.Register(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"Document"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;typeof&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;FlowDocument&lt;/FONT&gt;&lt;FONT size=2&gt;), &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;typeof&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;DocumentBox&lt;/FONT&gt;&lt;FONT size=2&gt;));&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;bool&lt;/FONT&gt;&lt;FONT size=2&gt; changedIndicator;&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;&lt;/FONT&gt;
&lt;P align=justify&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;Теперь вы можете вместо &lt;FONT color=#2b91af&gt;&lt;SPAN&gt;RichTextBox&lt;/SPAN&gt;&lt;/FONT&gt; использовать &lt;FONT color=#2b91af&gt;&lt;SPAN&gt;DocumentBox&lt;/SPAN&gt;&lt;/FONT&gt;. Для этого, вместо закомментированной строчки в XAML нужно написать:&lt;/FONT&gt;&lt;/FONT&gt; 


&lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;SPAN&gt;local&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;SPAN&gt;DocumentBox&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN&gt; x&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN&gt;Name&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;="testBox"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN&gt; Grid.Column&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;="1"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN&gt; Margin&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;="5,0,0,0"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN&gt; Document&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;="{&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;SPAN&gt;Binding&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN&gt; TestDocument&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;}"/&amp;gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P align=justify&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;Чтобы опробовать это решение, используйте в классе &lt;FONT color=#2b91af size=2&gt;Window1 &lt;/FONT&gt;такой отделённый код:&lt;/FONT&gt;&lt;/FONT&gt; &lt;BR&gt;&lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;public&lt;/FONT&gt;&lt;FONT size=2&gt; Window1()&lt;BR&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;nbsp;InitializeComponent();&lt;BR&gt;&amp;nbsp;DataContext = tests;&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;private&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;FONT size=2&gt; Add_Click(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;object&lt;/FONT&gt;&lt;FONT size=2&gt; sender, &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;RoutedEventArgs&lt;/FONT&gt;&lt;FONT size=2&gt; e)&lt;BR&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&amp;nbsp;Test&lt;/FONT&gt;&lt;FONT size=2&gt; t = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;Test&lt;/FONT&gt;&lt;FONT size=2&gt;();&lt;BR&gt;&amp;nbsp;t.TestDocument=&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;FlowDocument&lt;/FONT&gt;&lt;FONT size=2&gt;();&lt;BR&gt;&amp;nbsp;t.TestDocument.FontFamily = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;FontFamilyConverter&lt;/FONT&gt;&lt;FONT size=2&gt;().ConvertFromString(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"Times New Roman"&lt;/FONT&gt;&lt;FONT size=2&gt;) &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;FontFamily&lt;/FONT&gt;&lt;FONT size=2&gt;;&lt;BR&gt;&amp;nbsp;t.TestDocument.FontSize = 18.7;&lt;BR&gt;&amp;nbsp;t.TestDocument.Blocks.Add(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;Paragraph&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;Run&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"Содержимое "&lt;/FONT&gt;&lt;FONT size=2&gt; + (tests.Count+1) + &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"-го документа"&lt;/FONT&gt;&lt;FONT size=2&gt;)));&lt;BR&gt;&amp;nbsp;tests.Add(t);&lt;BR&gt;&amp;nbsp;listTests.SelectedItem = t;&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;private&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;FONT size=2&gt; Delete_Click(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;object&lt;/FONT&gt;&lt;FONT size=2&gt; sender, &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;RoutedEventArgs&lt;/FONT&gt;&lt;FONT size=2&gt; e)&lt;BR&gt;{&lt;BR&gt;tests.Remove((&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;Test&lt;/FONT&gt;&lt;FONT size=2&gt;)listTests.Items.CurrentItem);&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;System.Collections.ObjectModel.&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;ObservableCollection&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;Test&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;gt; tests = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; System.Collections.ObjectModel.&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;ObservableCollection&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;Test&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;gt;();&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;BR&gt;Попробуйте добавлять и удалять записи, изменять содержимое документа. Как видите, удалось "прибиндить" &lt;FONT color=#000000&gt;&lt;SPAN&gt;RichTextBox.Document&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;(точн&lt;FONT color=#000000&gt;ее &lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;DocumentBox.Document&lt;/SPAN&gt;&lt;/FONT&gt;) к &lt;FONT color=#2b91af&gt;&lt;SPAN&gt;FlowDocument&lt;/SPAN&gt;&lt;/FONT&gt;. Первая проблема решена.&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P align=justify&gt;
&lt;P align=justify&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;Вторая проблема выражается в том, что &lt;FONT color=#2b91af&gt;&lt;SPAN&gt;ListBox&lt;/SPAN&gt;&lt;/FONT&gt;&amp;nbsp;не реагирует на редактирование документов, а хотелось бы.&lt;/FONT&gt;&lt;/FONT&gt; 
&lt;P align=justify&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;Решить эту проблему можно двумя способами:&lt;/FONT&gt;&lt;/FONT&gt; 
&lt;P align=justify&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;1. Принудительно обновлять список в событии &lt;/FONT&gt;&lt;SPAN&gt;TextChanged&lt;/SPAN&gt;&lt;FONT face=Arial&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT face=Arial&gt;&lt;SPAN&gt;DocumentBox&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Arial&gt;&lt;SPAN&gt;-а:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT color=#0000ff size=2&gt;private&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;FONT size=2&gt; DocumentBox_TextChanged(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;object&lt;/FONT&gt;&lt;FONT size=2&gt; sender, &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;TextChangedEventArgs&lt;/FONT&gt;&lt;FONT size=2&gt; e)&lt;BR&gt;{&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;if&lt;/FONT&gt;&lt;FONT size=2&gt;(e.Changes.Count &amp;gt; 0) listTests.Items.Refresh();&lt;BR&gt;&lt;/FONT&gt;}&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P align=justify&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;Этот&amp;nbsp;способ даёт&amp;nbsp;красивый эффект, но будет сильно тормозить на больших &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;SPAN&gt;FlowDocument&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;-ах.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; 
&lt;P align=justify&gt;&lt;BR&gt;
&lt;P align=justify&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;2. Принудительно обновлять список в событии потери клавиатурного фокуса &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;SPAN&gt;DocumentBox&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;-а&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT color=#0000ff size=2&gt;private&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;FONT size=2&gt; DocumentBox_LostKeyboardFocus(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;object&lt;/FONT&gt;&lt;FONT size=2&gt; sender, &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;KeyboardFocusChangedEventArgs&lt;/FONT&gt;&lt;FONT size=2&gt; e)&lt;BR&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT size=2&gt; (testBox.ResetChangedIndicator()) listTests.Items.Refresh();&lt;BR&gt;}&lt;/P&gt;
&lt;P align=justify&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P align=justify&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;Не забудьте обявить соответствующие события в XAML:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; 


&lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;SPAN&gt;local&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;SPAN&gt;DocumentBox&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN&gt; x&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN&gt;Name&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;="testBox"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN&gt; Grid.Column&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;="1"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN&gt; Margin&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;="5,0,0,0"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN&gt; Document&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;="{&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;SPAN&gt;Binding&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN&gt; TestDocument&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;}"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN&gt; TextChanged&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;="DocumentBox_TextChanged"/&amp;gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P align=justify&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;или&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; 


&lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;SPAN&gt;local&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;SPAN&gt;DocumentBox&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN&gt; x&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN&gt;Name&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;="testBox"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN&gt; Grid.Column&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;="1"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN&gt; Margin&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;="5,0,0,0"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN&gt; Document&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;="{&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;SPAN&gt;Binding&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN&gt; TestDocument&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;}" &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN&gt;LostKeyboardFocus&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;="DocumentBox_LostKeyboardFocus"/&amp;gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=6216" width="1" height="1"&gt;</content><author><name>ServiceDeveloper</name><uri>http://dev.net.ua/members/ServiceDeveloper.aspx</uri></author><category term="FlowDocument" scheme="http://dev.net.ua/blogs/servicedeveloper/archive/tags/FlowDocument/default.aspx" /><category term="WPF" scheme="http://dev.net.ua/blogs/servicedeveloper/archive/tags/WPF/default.aspx" /></entry><entry><title>Знакомимся с бесплатной объектной базой db4o. Клиент/Сервер.</title><link rel="alternate" type="text/html" href="http://dev.net.ua/blogs/servicedeveloper/archive/2008/04/04/5834.aspx" /><id>http://dev.net.ua/blogs/servicedeveloper/archive/2008/04/04/5834.aspx</id><published>2008-04-04T12:53:00Z</published><updated>2008-04-04T12:53:00Z</updated><content type="html">&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;В этом посте мы рассмотрим возможности, которые Db4o предоставляет для поддержания технологии Клиент/Сервер (C/S). C/S подразумевает взаимодействие приложений двух видов — сервера, который инициирует обслуживание хранилища, и клиента, который работает с хранилищем через сервер. То что мы делали до сих пор никак не напоминало C/S. Приложение работало непосредственно с файлом контейнера:&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;objectContainer = &lt;/SPAN&gt;&lt;FONT color=#2b91af&gt;&lt;SPAN&gt;Db4oFactory&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;.OpenFile(config, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;SPAN&gt;@"D:\Test.yap"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;Такой режим работы принято называть embedded — встраиваемый режим. Преимуществами embedded являются максимальное быстродействие и предельная простота. Недостаток — невозможность одновременной работы нескольких приложений с одним контейнером.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;Чтобы организовать C/S, нужен сервер. Но в стандартной поставке Db4o нет никакого сервера. Взамен этого, разработчики Db4o предоставляют несколько API методов для реализации C/S. Это значит, что сервер мы должны написать самостоятельно. Сейчас мы этим и займёмся.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;Тип проекта может быть любым, но я выбираю WPF из-за возможности лёгкой реализации консоли при помощи &lt;FONT color=#2b91af&gt;&lt;SPAN&gt;FlowDocumentScrollViewer&lt;/SPAN&gt;&lt;/FONT&gt;. Если у вас есть возможность разместить новый проект на удалённом компьютере (например, при помощи удалённого рабочего стола), советую воспользоваться этим для испытания работы Db4o в сети (сеть должна поддерживать протокол TCP/IP). Если такой возможности нет, придется всё делать на одном компьютере, "эмулируя" сеть через localhost. Но, в любом случае нужно придерживаться золотого правила, о котором мы говорили раньше — &lt;I&gt;&lt;B&gt;каждое приложение, работающее с контейнером должно иметь доступ к сборке с описанием классов этого контейнера. Эта сборка должна быть единой для всех приложений, использующих данный контейнер.&lt;/B&gt;&lt;/I&gt; И сервер здесь не исключение. Поэтому в &lt;SPAN&gt;В Solution Explorer -- References&lt;/SPAN&gt; обязательно должна быть добавлена ссылка на наше &lt;SPAN&gt;WindowsFormsApplication, которое использовалось для создания и модификации контейнера&lt;/SPAN&gt;. Сделайте это так, как мы делали в посте Знакомимся с бесплатной объектной базой db4o. Запросы. Не забудьте также добавить ссылку на Db4objects.Db4o.dll.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;В XAML проекта вставьте в грид такой код:&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;SPAN&gt;FlowDocumentScrollViewer&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN&gt; Name&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;="flowDocumentScrollViewer1"&amp;gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#a31515&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;nbsp;&amp;lt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;FlowDocument&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; Name&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;="Reporter"&amp;gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#a31515&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;Paragraph&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;gt;&amp;lt;/&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;Paragraph&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#a31515&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;nbsp;&amp;lt;/&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;FlowDocument&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;FlowDocumentScrollViewer&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT size=2&gt;В Window1.xaml.cs объявите:&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;using&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; Db4objects.Db4o;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;using&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; Db4objects.Db4o.Messaging;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;using&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; WindowsFormsApplicationDB; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;//У вас – ваше WindowsFormsApplication&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;В классе &lt;FONT color=#2b91af&gt;&lt;SPAN&gt;Window1&lt;/SPAN&gt;&lt;/FONT&gt; создайте два поля:&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;string&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; containerFile = &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;SPAN&gt;@"D:\Test.yap"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;IObjectServer&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; server;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;Назначьте событие &lt;FONT color=#000000&gt;&lt;SPAN&gt;Window_Loaded:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;server = &lt;FONT color=#2b91af&gt;Db4oFactory&lt;/FONT&gt;.OpenServer(containerFile, 4488);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;ToReporter(&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;"Запущен сервер Db4o"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;ToReporter(&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;"Открыт контейнер "&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; + containerFile);&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;server.GrantAccess(&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;"user1"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;"password1"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;server.GrantAccess(&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;"user2"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;"password2"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;ToReporter(&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;"Открыт доступ пользователям user1, user2"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;и событие Window_Closed:&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;server.Close();&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;метод ToReporter нужен для стекового вывода информации на консоль:&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; ToReporter(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; msg)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;{ &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;nbsp;Paragraph&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; p = &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;new&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;Paragraph&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;new&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;Run&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;DateTime&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;.Now.ToString() + &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;" -- "&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; + msg));&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&amp;nbsp;Reporter.Blocks.InsertBefore(Reporter.Blocks.FirstBlock, p);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;Для начала этого вполне достаточно. Можете запускать свой сервер.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;Теперь, пора подумать о клиенте. Как вы уже догадались, клиентами будут &lt;SPAN&gt;WindowsFormsApplication и WpfApplication&lt;/SPAN&gt;, которые мы создавали и модифицировали в предыдущих постах. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;Начнём с нашего &lt;SPAN&gt;WindowsFormsApplication&lt;/SPAN&gt;. В событии &lt;SPAN&gt;Form1_Load&lt;/SPAN&gt; закомментируйте строчку:&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT color=#008000&gt;&lt;FONT size=2&gt;//objectContainer = Db4oFactory.OpenFile(config, @"D:\Test.yap");&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;и вместо неё впишите:&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;objectContainer = &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;Db4oFactory&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;.OpenClient(config, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;"server"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;, 4488, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;"user1"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;"password1"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;где &lt;FONT color=#a31515&gt;&lt;SPAN&gt;"server"&lt;/SPAN&gt;&lt;/FONT&gt; — имя или IP адрес компьютера, на котором запущен сервер, если всё делается на одном компьютере, напишите &lt;FONT color=#a31515&gt;&lt;SPAN&gt;"localhost"&lt;/SPAN&gt;&lt;/FONT&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;Приятным фактом является то, что клиент реализует интерфейс &lt;FONT color=#2b91af&gt;&lt;SPAN&gt;IObjectContainer&lt;/SPAN&gt;&lt;/FONT&gt;, поэтому всё что мы дописывали в &lt;FONT color=#2b91af&gt;&lt;SPAN&gt;ObjectContainerExtend&lt;/SPAN&gt;&lt;/FONT&gt; или могли бы реализовать в классе-обёртке остаётся в силе. Это вовсе не означает, что принцип построения приложений embedded и C/S одинаков, в этом мы скоро убедимся. Но в построенную нами объектную модель никаких изменений вносить не надо.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;Теперь вы можете запустить несколько копий приложения &lt;SPAN&gt;WindowsFormsApplication&lt;/SPAN&gt;. Внесите изменения в одной копии и нажмите кнопку Save. Нажмите Load в другой копии и... увидите, что ничего не изменилось. Для того, чтобы понять, почему данные не обновляются, нужно иметь представление о механизме транзакций в C/S приложениях. Если у вас есть познания о транзакциях, реализуемых RDBMS, этого вполне достаточно, Db4o здесь не предлагает ничего нового. Первая транзакция начинается при открытии клиента и завершается методами Commit() или Rollback(), которые начинают следующую транзакцию. Commit утверждает изменения, внесённые в контейнер в течение завершаемой транзакции (после чего эти изменения могут видеть другие приложения), Rollback отвергает изменения, выполняя "откат" на начало завершаемой транзакции. Commint выполняется также методом &lt;FONT color=#2b91af&gt;&lt;SPAN&gt;IObjectContainer&lt;/SPAN&gt;&lt;/FONT&gt;.Close(); В Db4o нет понятия аutocommit, хотя ничто не мешает вам реализовать это, перегрузив методы Set и Delete.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;Итак, если мы хотим видеть внесённые в контейнер изменения из другой копии приложения, нужно завершать транзакцию в событиях &lt;SPAN&gt;toolStripButtonSave_Click и toolStripButtonSave2_Click. Для этого допишите там строчку:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;objectContainer.Commit();&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;Давайте ещё раз попробуем внести изменения в одной копии приложения и увидеть их в другой. И опять вы будете разочарованы. Несмотря на то, что транзакция завершилась и все изменения в контейнере утверждены, вторая копия, скорее всего их не отобразит. Виною тому — кэш. Логика кзширования объектов в Db4o приблизительно такова — если объект уже есть в оперативной памяти, зачем его тянуть туда ещё раз? В этом случае объект не извлекается из контейнера, а запросу передается ссылка на существующий объект. При помощи такого подхода развивается максимальная скорость обмена данными с контейнером. В embedded это не вызывает особых проблем, кроме проблемы активации, которую мы подробно рассмотрели в прошлом посте. Но в C/S возникает проблема — так называемое "старение объектов". Находящийся в контейнере, объект может в любой момент измениться, в то время, как копии этого объекта в памяти клиентов остаются неизменными (стареют). В конечном итоге может возникнуть ситуация, которая в OOBD называется несоответствием моделей, когда модель, отображаемая вашим компьютером критически отличается от модели в хранилище. Для борьбы с этим явлением существует два различных подхода. Первый подход состоит в принудительном обновлении объектов, не зависимо от их наличия в оперативной памяти. Это несколько снизит производительность, но увеличит надёжность вашего приложения. В Db4o для этого существует специальный метод &lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;Refresh&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;. Чтобы обновление в нашем &lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;WindowsFormsApplication осуществлялось без проблем, измените метод &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;RefreshGrid1:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;bindingSource1.DataSource = &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;new&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;EditList&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;Country&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;gt;(objectContainer.Query&amp;lt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;Country&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;gt;().ToList());&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;foreach&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;( &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;var&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; obj &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;in&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; ((&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;EditList&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;Country&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;gt;)bindingSource1.DataSource)) objectContainer.Ext().Refresh(obj, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;int&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;.MaxValue);&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;bindingSource1.ResetBindings(&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;false&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;и метод RefreshGrid2:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=left&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; (country==&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;null&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;) bindingSource2.DataSource = &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;new&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;SPAN&gt;EditList&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;SPAN&gt;Region&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;&amp;gt;(objectContainer.Query&amp;lt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;SPAN&gt;Region&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;&amp;gt;().ToList());&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=left&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; bindingSource2.DataSource = &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;new&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;EditList&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;Region&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;gt;(country);&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=left&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;foreach&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; (&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;var&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; obj &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;in&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; ((&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;EditList&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;Region&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;gt;)bindingSource2.DataSource)) objectContainer.Ext().Refresh(obj, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;int&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;.MaxValue);&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=left&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;bindingSource2.ResetBindings(&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;false&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;Второй подход состоит в открытии клиента только на время операций чтения-записи, с последующим его закрытием, после чего кеш сбрасывается автоматически. Этот подход мы чуть позже используем в нашем WpfApplication, с которым мы работали в прошлом посте. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;А сейчас давайте рассмотрим ещё одну возможность, которую Db4o предоставляет для поддержания C/S технологии. Это работа сервера в режиме &lt;FONT face="Verdana, sans-serif"&gt;RECIPIENT — когда сервер может принимать сообщения от клиентов (Out-of-band signalling). &lt;/FONT&gt;Для демонстрации этой возможности мы будем передавать в консоль сервера данные о клиенте. Дополним наше &lt;SPAN&gt;WindowsFormsApplication:&lt;/SPAN&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;В файле Entities.cs создадим новый класс:&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;public&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;class&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;SPAN&gt;ConnectInfo&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;nbsp;public&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; ConnectInfo(&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;string&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; userName, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;bool&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; connect)&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&amp;nbsp;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&amp;nbsp; User = userName;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&amp;nbsp; ConnectStatus = connect;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&amp;nbsp;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; User;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;nbsp;public&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;bool&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; ConnectStatus;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;nbsp;public&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;string&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; AppName;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;nbsp;public&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;string&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; Host;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;nbsp;public&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;string&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; Address;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;Теперь дополним класс &lt;FONT color=#2b91af&gt;&lt;SPAN&gt;ObjectContainerExtend&lt;/SPAN&gt;&lt;/FONT&gt; ещё одним методом:&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;public&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;static&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; ConnectMessage(&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;this&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;SPAN&gt;IObjectContainer&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; container, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;string&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; user, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;bool&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; status)&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&amp;nbsp;Db4objects.Db4o.Messaging.&lt;FONT color=#2b91af&gt;IMessageSender&lt;/FONT&gt; sender = container.Ext().Configure().ClientServer().GetMessageSender();&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;nbsp;ConnectInfo&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; ci = &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;new&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;ConnectInfo&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;(user, status);&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;nbsp;ci.Host = System.Net.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;Dns&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;.GetHostName();&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;nbsp;ci.Address = System.Net.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;Dns&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;.GetHostAddresses(System.Net.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;Dns&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;.GetHostName())[0].ToString();&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;nbsp;ci.AppName = System.Reflection.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;Assembly&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;.GetEntryAssembly().GetName().Name;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&amp;nbsp;sender.Send(ci);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;Использовать этот метод будем после открытия клиента в событии &lt;SPAN&gt;Form1_Load&lt;/SPAN&gt;:&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;..............&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;objectContainer = &lt;/SPAN&gt;&lt;FONT color=#2b91af&gt;&lt;SPAN&gt;Db4oFactory&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;.OpenClient(config, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;SPAN&gt;"server"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;, 4488, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;SPAN&gt;"user1"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;SPAN&gt;"password1"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;objectContainer.ConnectMessage(&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;"user1"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;true&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;..............&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;и перед закрытием клиента в событии &lt;SPAN&gt;Form1_FormClosed&lt;/SPAN&gt;:&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;objectContainer.ConnectMessage(&lt;/SPAN&gt;&lt;FONT color=#a31515&gt;&lt;SPAN&gt;"user1"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;false&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;objectContainer.Close();&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;Конечно, это не очень удобно, лучше было бы перегрузить методы &lt;FONT color=#000000&gt;&lt;SPAN&gt;OpenClient&lt;/SPAN&gt;&lt;/FONT&gt; и &lt;FONT color=#000000&gt;&lt;SPAN&gt;Close&lt;/SPAN&gt;&lt;/FONT&gt; в классе-обёртке.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;Для того, чтобы сообщения принимались сервером, необходимо "настроить" сервер в режиме &lt;SPAN&gt;recipient.&lt;/SPAN&gt; Откройте проект сервера и допишите в событие &lt;SPAN&gt;Window_Loaded&lt;/SPAN&gt; строку:&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;server.Ext().Configure().ClientServer().SetMessageRecipient(&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;this&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;где — &lt;FONT color=#0000ff&gt;&lt;SPAN&gt;this&lt;/SPAN&gt;&lt;/FONT&gt; это любой класс, реализующий интерфейс &lt;FONT color=#2b91af&gt;&lt;SPAN&gt;ImessageRecipient&lt;/SPAN&gt;&lt;/FONT&gt;. В нашем случае, был использован класс &lt;FONT color=#2b91af&gt;&lt;SPAN&gt;Window1&lt;/SPAN&gt;&lt;/FONT&gt;:&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;public&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;partial&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;class&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;SPAN&gt;Window1&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; : &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;SPAN&gt;Window&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;SPAN&gt;IMessageRecipient&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;Интерфейс &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;IMessageRecipient&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; требует реализации всего лишь одного метода&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; ProcessMessage(&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;IObjectContainer&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; container, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;object&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; message)&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;. Этот метод будет вызываться каждый раз, когда кто-нибудь из клиентов отошлёт сообщение. В нашем случае он будет выглядеть так:&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;&lt;FONT color=#2b91af&gt;&lt;SPAN&gt;ConnectInfo&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; ci = message &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;as&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;SPAN&gt;ConnectInfo&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; (ci == &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;null&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;) &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;return&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;Action&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; InvokeMethod = () =&amp;gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&amp;nbsp;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;nbsp; string&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; msginfo = &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;"клиент "&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; + ci.User + &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;"; Приложение "&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; + ci.AppName + &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;"; Компьютер "&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; + ci.Host + &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;"; IP адрес "&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; + ci.Address;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;&amp;nbsp; ToReporter((ci.ConnectStatus ? &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;"Подключен "&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt; : &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;"Отключен "&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;) + msginfo);&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&amp;nbsp;};&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;Dispatcher.BeginInvoke(System.Windows.Threading.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;DispatcherPriority&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;.Background, InvokeMethod);&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;Откомпилируйте проект и запустите сервер. Теперь запустите своё &lt;SPAN&gt;WindowsFormsApplication&lt;/SPAN&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;И в заключении "переведём на C/S" наше WpfApplication, которое мы использовали в прошлом посте. Для этого заккоментируйте везде, где это встречается (&lt;SPAN&gt;flowDocumentScrollViewer1_Loaded, Window_Closed, button1_Click&lt;/SPAN&gt;) строки открывающие контейнер:&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT color=#008000&gt;&lt;FONT size=2&gt;//objectContainer = Db4oFactory.OpenFile(@"D:\Test.yap");&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;и закрывающие контейнер:&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT color=#008000&gt;&lt;FONT size=2&gt;//objectContainer.Close();&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;В начале события &lt;SPAN&gt;button1_Click&lt;/SPAN&gt; впишите: &lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;objectContainer = &lt;/SPAN&gt;&lt;FONT color=#2b91af&gt;&lt;SPAN&gt;Db4oFactory&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;.OpenClient(&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;SPAN&gt;"server"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;, 4488, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;SPAN&gt;"user2"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;SPAN&gt;"password2"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;objectContainer.ConnectMessage(&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;"user2"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;true&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;и завершите это событие строками:&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;objectContainer.ConnectMessage(&lt;/SPAN&gt;&lt;FONT color=#a31515&gt;&lt;SPAN&gt;"user2"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;false&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;"&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;objectContainer.Close();&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;Теперь запустите сервер и два клиентских приложения: WindowsFormsApplication и WpfApplication. Вносите изменения в &lt;SPAN&gt;WindowsFormsApplication &lt;/SPAN&gt;и смотрите, как "отрабатывает"&amp;nbsp;Query в WpfApplication.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=5834" width="1" height="1"&gt;</content><author><name>ServiceDeveloper</name><uri>http://dev.net.ua/members/ServiceDeveloper.aspx</uri></author><category term="Db4o" scheme="http://dev.net.ua/blogs/servicedeveloper/archive/tags/Db4o/default.aspx" /></entry><entry><title>Знакомимся с бесплатной объектной базой db4o. Активация.</title><link rel="alternate" type="text/html" href="http://dev.net.ua/blogs/servicedeveloper/archive/2008/03/26/5776.aspx" /><id>http://dev.net.ua/blogs/servicedeveloper/archive/2008/03/26/5776.aspx</id><published>2008-03-26T07:34:00Z</published><updated>2008-03-26T07:34:00Z</updated><content type="html">&lt;P align=justify&gt;&lt;FONT size=2&gt;Для демонстрации принципов активации объектов в Db4o, мы будем использовать &lt;FONT color=#000000&gt;&lt;SPAN&gt;&lt;SPAN&gt;WpfApplication&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt; из поста Знакомимся &lt;A href="http://dev.net.ua/blogs/servicedeveloper/archive/2008/02/17/5425.aspx"&gt;с бесплатной объектной базой db4o. Запросы&lt;/A&gt;. Но перед этим давайте немного изменим содержимое нашего контейнера в приложении &lt;FONT color=#000000&gt;&lt;SPAN&gt;&lt;SPAN&gt;WindowsFormsApplication, которое мы модифицировали в прошлом посте &lt;A href="http://dev.net.ua/blogs/servicedeveloper/archive/2008/03/19/5681.aspx"&gt;Знакомимся с бесплатной объектной базой db4o. Реализация сущностей&lt;/A&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;Если помните, тогда мы добавили новый файл &lt;SPAN&gt;Entities&lt;/SPAN&gt;.cs и разместили в нём сущности &lt;FONT color=#2b91af&gt;&lt;SPAN&gt;Country&lt;/SPAN&gt;&lt;/FONT&gt; и &lt;FONT color=#2b91af&gt;&lt;SPAN&gt;Region&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;. Теперь добавим новую сущность &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;SPAN&gt;City&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; и рефлекторно свяжем её с &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;SPAN&gt;Region&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt;. То, что должно в итоге получиться, можно увидеть &lt;A href="http://www.regul.nm.ru/Db4o/Activation/Entities.cs"&gt;здесь&lt;/A&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;В Analyse.cs перепишем &lt;/SPAN&gt;событие &lt;SPAN&gt;toolStripButtonRestructuring_Click&lt;/SPAN&gt;:&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P style="MARGIN-BOTTOM:0cm;" align=justify&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;var&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; regions = &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;new&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN&gt;string&lt;/SPAN&gt;&l