我需要根据ViewModel中的布尔属性将Window的光标更改为沙漏,为实现这一点,我已经定义了一个转换器,它将bool转换为Cursor,如下所示:
[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
函数未被调用。为什么呢?
由于
答案 0 :(得分:1)
问题是由于窗口的DataContext设置为ViewModel以及何时解析XAML的顺序。它还与我们在ViewModel实现中如何处理PropertyChanged事件有关。哪个我无法在这里粘贴。
我还没有弄明白,但在这个特殊情况下,在后面的代码中构建绑定可以解决问题:
Binding binding = new Binding();
binding.Source = viewmodel;
binding.Path = new PropertyPath("IsBusy");
binding.Converter = new CursorExtensionConverter();
SetBinding(CursorProperty, binding);