のObservableCollectionは、あなたがそこから任意のbenifitをreciveません使用方法に応じて、このために使用することができますが。 ObservableCollectionの主な機能は、INotifyCollectionChangedを実装することです。このインターフェイスが行うことは、プロパティが変更されたことをUIに伝えるための通知メカニズムを提供します。ObservableCollectionは既にこれを実装しているので、DataGrid、ListBox、ItemsControlなどのItemSourceプロパティをこのタイプのコレクションにバインドすると、項目がAdded/Removed/Replaced/Moved/ResetになるたびにUIが自動的に更新されます。このため、新しいIEnumerable結果セットでコレクションを更新するたびに、コレクションをクリアしてから新しい結果を追加する必要があります。
しかし、このケースではObservableCollectionよりも推奨されるオプションがあります。これは、ObjectDataProviderと呼ばれるものを使用することです。これを使用すると、コードを完全に回避することができ、全体的にははるかにクリーンになります。だから我々はどこかに私たちのサービスを持って、あなたが記述サービス気に入りましWindow.xaml.cs
public class TranslationService
{
public IEnumerable<string> Translate(string s)
{
return s.ToCharArray().Select(c => c.ToString());
}
}
で、この場合には、それがテキストボックスから文字列を受け取り、IEnumerableを返します。今、XAMLではこのサービスを使用して呼び出しを行うことができます。ウィンドウdeclerationsで
、我々はサービスが置かれている場所の名前空間を追加します。
xmlns:local="clr-namespace:WpfApplication4"
今、私たちのWindow.Resourcesに(またはUserControl、またはどこか他の)私たちは私たちのサービスを参照することができます。サービスとしてリソースを公開したら、使用するTranslateメソッドを公開するObjectDataProviderを作成できます。
<Window.Resources>
<local:TranslationService x:Key="MyTranslationService" />
<ObjectDataProvider x:Key="MyProvider"
ObjectInstance="{StaticResource MyTranslationService}"
MethodName="Translate">
<ObjectDataProvider.MethodParameters>
""
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
ObjectDataProviderはサービスに対してキーイングされ、Stringメソッドを使用してTranslateメソッドを呼び出します。これで、テキストボックスに応答するだけです。
Bindingプロパティの一部を使用してこれを行うことができます。 TextBoxのTextPropertyをObjectDataProviderにバインドして、Sourceプロパティを設定するようにします。 PathにバインドするObjectDataProviderの部分は、MethodParameterです。ここでは、そのプロパティのソースに直接バインドするように設定し、一方向にのみ移動します。つまり、ObjectDataProviderのメソッドパラメータはTextBoxのテキストを更新しません。最後に、UpdateSourceTriggerをPropertyChangedに設定して、テキストに変更があったときは常に、オブジェクトデータプロバイダ内のバインディング元のバインディングを設定するように指示できます。
<StackPanel>
<TextBox TextChanged="OnTextChanged"
Text="{Binding Source={StaticResource MyProvider}, Path=MethodParameters[0], BindsDirectlyToSource=True, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}" />
<ListBox ItemsSource="{Binding Source={StaticResource MyProvider}}" />
</StackPanel>
残っているのは、グリッド内のItemsSourceまたはこの場合は単純なListBoxを設定することです。
DataGridの最後の部分について: WPFToolkitのデータグリッドを使用している場合は、プロパティを使用して設定できる自動生成機能があります。詳細については、hereを参照してください。
ここには良い読書があるようです。今すぐチェックする時間はありませんが、私の後に戻ります。 –