私はWPFでしばらく遊んでいました。私は(コンバータを使用して)単一のパラメータでメソッドにバインドする方法を読んだ。しかし、純粋に仮説的に、クラス内のローカル変数にアクセスできる関数にバインドする方法はありますか?ローカル変数にアクセスするメソッドへのバインド
たとえば、DataTemplateを介してコードの中で定義され、操作された文字列のリストにバインドされるTextBoxのListBoxがあるとします。ただし、文字列全体を表示する代わりに、対応する文字列の最初のN単語のみが表示されます。これは、文字列とNをパラメータとして受け入れるメソッドで簡単に実行できます。しかし、Nはユーザが自由に設定できるので、ローカル変数でなければなりません。これを柔軟なコントロールにするために、異なるNを持つListBoxを持つウィンドウを多数持つことができるようにNを静的変数にすることはできません。それに、それは非常に優しくないでしょう。
コンバーターは1つの変数のみを受け入れますが、Nにアクセスする必要があるため、コンバーターを使用することはできません。静的変数を不正使用して使用することはできません。
TextBoxesを、ローカル変数にアクセスできるローカルプロパティにバインドすることもできません。これは、通常のオブジェクトに対して行うように、オブジェクトのリスト全体にバインドするためです。
私が見るところでは、ObjectDataProviderでは、ウィンドウ内で定義されたメソッドではなく、特定のオブジェクトのクラスのメソッドだけを呼び出すことができます。このような単純な機能を実現するために、新しいクラスを作成し、そのクラスのすべてのインスタンスにNをコピーするのは無駄です。
実際のシナリオではもちろん、前の段落のように文字列とNを含むオブジェクトを作成するか、文字列と文字列の最初の2つの単語を含む別の文字列の両方を含むような方法でこの問題を回避できますあらかじめ計算されている。私はWPFのためのそのような機能が存在するかどうかを尋ねています。なぜなら、それはWPFが基づいている概念にうまく適合しており、そのような機能は何らかの形で役立つと信じています。
解決策がすぐにわかるのは残念です。私は何時間も探してきた。
解決策がある場合は、コードの背後に定義されているメソッドのみを使用して、XAMLで完全に行う方法がありますか?
編集:Clemens ... NはConvertParameterとして渡すことはできませんが、ConvertParameterにバインドすることはできません。最初の提案については、試してみましたが、IMultiValueConverterのConvertメソッドでエラーSpecified cast is not valid.
が発生しています。値は[N]ではなく、DependencyProperty.UnsetValueです。以下のコードは次のとおりです。
XAML
<MultiBinding>
<MultiBinding.Converter>
<my:StringShorternerConverter />
</MultiBinding.Converter>
<Binding Path="Title" />
<Binding ElementName="me" Path="N" />
</MultiBinding>
インサイドStringShorternerConverter
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ShortenText((String)values[0], (Int32)values[1]);
}
EDIT 2:そのエラーは、いくつかの無関係な間違いによるものであったように見えます。うん、それは動作します。どうもありがとう。
フィードバックには、回答にコメントする必要があります。それ以外の場合は、回答しなかった人はわかりません。あなたの質問を編集するときに、自動的には通知されません。編集自体:Nはどのように定義され、どのように設定されますか?いくつかのコードを表示してください。 – Clemens