Bindingの各プロパティ(UpdateSourceTrigger,Delay,NotifyOnSourceUpdated)の動作について


## Binding  
<div class="section">
    <p>普段はそこまで弄らないプロパティをメインに備忘録</p>
</div>
### BindingGroupName 
<div class="section">
    <p>バインディングをグループで指定する際に利用します。<br />
BindingGroupNameを指定することで一括で複数コントロールのバインディングなどを操作できる。</p>
</div>

### BindsDirectlyToSource
<div class="section">
    <p>Path を評価するときに、データ項目を基準にするか、DataSourceProvider オブジェクトを基準にするかを示す値を取得または設定します。</p>
</div>

### UpdateSourceTrigger
<div class="section">
    <p>バインディングのタイミングを操作できます。</p>
<ul>
<li>LostFocus　</li>
</ul><p>　ロストフォーカス時に動作</p>
<ul>
<li>PropertyChanged</li>
</ul><p>　プロパティ変更時に動作。</p>

<ul>
<li>Explicit　</li>
</ul><p>　マニュアル、更新タイミングはBindingExpression.UpdateSourceにて実行するなどタイミングを完全に制御したい場合に利用。</p><p>各更新タイミングの動作イメージ<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/f/furugen098/20180203/20180203040842.gif" alt="f:id:furugen098:20180203040842g:plain" title="f:id:furugen098:20180203040842g:plain" class="hatena-fotolife" itemprop="image"></span><br />
</p>

</div>

### Delay

<div class="section">
    <p>ソースを更新するまえにミリ秒単位で待機します。<br />
<b>.xaml</b></p>
<pre class="code lang-xml" data-lang="xml" data-unlink><span class="synIdentifier">&lt;TextBox  </span><span class="synType">Text</span>=<span class="synConstant">&quot;{Binding Text, ElementName=txtInput, UpdateSourceTrigger=PropertyChanged, Delay=1000}&quot;</span><span class="synIdentifier">/&gt;</span>
</pre><p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/f/furugen098/20180203/20180203035745.gif" alt="f:id:furugen098:20180203035745g:plain" title="f:id:furugen098:20180203035745g:plain" class="hatena-fotolife" itemprop="image"></span><br />
</p>

</div>
<div class="section">
    <h5>NotifyOnSourceUpdated</h5>
    <p>有効にするとソース更新時のイベント（NotifyOnSourceUpdated）が有効になります。<br />
あまり利用することはないと思いますが、私はデバッグ目的での一時的にONにして監視に利用したりします。<br />
<b>.xaml</b></p>
<pre class="code lang-xml" data-lang="xml" data-unlink><span class="synIdentifier">&lt;TextBox  </span><span class="synType">x</span><span class="synComment">:</span><span class="synType">Name</span>=<span class="synConstant">&quot;txtNotifySouce&quot;</span><span class="synIdentifier">  </span><span class="synType">Text</span>=<span class="synConstant">&quot;{Binding Text, ElementName=txtInput, NotifyOnSourceUpdated=True}&quot;</span>
<span class="synIdentifier">   </span><span class="synType">Binding</span><span class="synComment">.</span><span class="synType">SourceUpdated</span>=<span class="synConstant">&quot;SourceUpdatedHandler&quot;</span><span class="synIdentifier">  /&gt;</span>
</pre><p><b>.cs</b></p>
<pre class="code lang-cs" data-lang="cs" data-unlink><span class="synType">private</span> <span class="synType">void</span> SourceUpdatedHandler(<span class="synType">object</span> sender, DataTransferEventArgs args)
{
   UpdatedLog(<span class="synConstant">&quot;SourceUpdatedHandler&quot;</span>, args);
}
</pre>
</div>
<div class="section">
    <h5>NotifyOnTargetUpdated</h5>
    <p>こちらはソースのターゲット更新時のプロパティです。<br />
<b>.xaml</b></p>
<pre class="code lang-xml" data-lang="xml" data-unlink>                        <span class="synIdentifier">&lt;TextBox </span><span class="synType">x</span><span class="synComment">:</span><span class="synType">Name</span>=<span class="synConstant">&quot;txtNotifyTarget&quot;</span><span class="synIdentifier"> </span><span class="synType">Text</span>=<span class="synConstant">&quot;{Binding Text, ElementName=txtInput, NotifyOnTargetUpdated=True}&quot;</span>
<span class="synIdentifier">                                  </span><span class="synType">Binding</span><span class="synComment">.</span><span class="synType">TargetUpdated</span>=<span class="synConstant">&quot;TargetUpdatedHandler&quot;</span><span class="synIdentifier">/&gt;</span>
</pre><p><b>.cs</b></p>
<pre class="code lang-cs" data-lang="cs" data-unlink><span class="synType">private</span> <span class="synType">void</span> TargetUpdatedHandler(<span class="synType">object</span> sender, DataTransferEventArgs args)
{
   UpdatedLog(<span class="synConstant">&quot;TargetUpdatedHandler&quot;</span>, args);
}
</pre><p>NotifyOnSourceUpdated および　NotifyOnTargetUpdatedはDataTransferEventArgsが取得できるので、<br />
細かいプロパティまで参照可能です。下記、プロパティ名とコントロールの内容を出力してます。<br />
<span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/f/furugen098/20180203/20180203040234.gif" alt="f:id:furugen098:20180203040234g:plain" title="f:id:furugen098:20180203040234g:plain" class="hatena-fotolife" itemprop="image"></span><br />
</p>

</div>
<div class="section">
    <h5>IsAsync</h5>
    <p>Bindingを行う際の非同期の有効無効を制御できます。<br />
ユーザビリティの改善や一部のコントロールの動作が遅い場合に有効ですね。<br />
画像＋非同期の対応のついては下記のページが参考になります。<br />
<a href="https://www.codeproject.com/Articles/749212/WPF-Async-Data-Binding-Data-Virtualization">Async Data Binding &amp; Data Virtualization - CodeProject</a></p><br />
<p>サンプル用に作ったソースをコミットしてます。<br />
<a href="https://github.com/furugen/StudyBinding">GitHub - furugen/StudyBinding</a></p>

</div>