/ ViewModelでプロパティが変更されたときに/ ValueConverterが呼び出されない - wpf

ViewModelでプロパティが変更されたときにValueConverterが呼び出されていない - wpf

これを実現するには、ViewModelのブール値プロパティに応じてWindowのカーソルを砂時計に変更する必要があります。次に示すように、boolをCursorに変換するConverterを定義しました。

   [ValueConversion(typeof(bool), typeof(Cursors))]
public class CursorExtensionConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null && ((bool)value))
{
return Cursors.Wait;
}
return Cursors.Arrow;
}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}

XAMLでは、Window.Cursorをコンバーターにバインドするための次のマークアップがあります。

    <Window.Resources>
<Converters:CursorExtensionConverter x:Key="cursorExtensionConverter"/>
</Window.Resources>
<Window.Cursor>
<Binding Path="IsBusy" Converter="{StaticResource cursorExtensionConverter}"/>
</Window.Cursor>

ViewModelで、設定したとき IsBusy = true;の Convert 機能 CursorExtensionConverter 呼び出されていません。どうして?

ありがとう

回答:

回答№1は1

問題は、windowのDataContextはViewModelに設定され、XAMLが解析されるときに設定されます。また、ViewModelの実装でPropertyChangedイベントがどのように処理されるかにも関連します。ここでは貼り付けることができません。

完全には理解できていませんが、この特定のケースでは、背後にあるコードでバインディングを構築することで問題が解決します。

Binding binding = new Binding();
binding.Source = viewmodel;
binding.Path = new PropertyPath("IsBusy");
binding.Converter = new CursorExtensionConverter();
SetBinding(CursorProperty, binding);