ListBoxのSelectedIndex> = 0であるかどうかに基づいて、コントロールのIsEnabledプロパティを設定しています。私はコードの背後でこれを行うことができますが、私は頻繁に行うことなので、この動作のためのバリューコンバータを作成したかったのです。値コンバータが起動する原因は何ですか?
私は、タスクを処理するために、この値コンバータを作成し、IsEnabledプロパティにそれをバインド:
[ValueConversion(typeof(Selector), typeof(bool))]
public class SelectorItemSelectedToBooleanConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null || !(value is Selector))
return null;
var control = value as Selector;
return control.SelectedIndex >= 0;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
アプリケーションがロードされるとコンバータはのみ、一度呼び出されます。 SelectedIndexが変更されたときには発生しません。
私の質問は、バリューコンバータが起動する原因ですか?私はそれがバインドされたデータが変更されたときだと仮定します。そうすれば、さまざまな状況でコンバータを強制的に起動する方法がありますか?私は正しい質問をしていますか?
xamlであなたのバインディングを表示できますか? SelectedIndexは依存関係プロパティであり、動作するはずです –
バインドはSelectedIndexプロパティではなく、ListBox自体にあります。私はあなたが答えにヒットしたと思う:コントロール自体はdpではないので、おそらくコンテンツが変更されるたびにonylが働くだろう。 –