1

我有以下场景......

<Page.Resources>
    <converters:EnumToBoolean x:Key="Empty" Expected="Empty"/>
    <converters:EnumToBoolean x:Key="Full"  Expected="Full"/>
</Page.Resources>

.
.
.

<SomeControl IsChecked="{x:Bind ViewModel.State, Converter={StaticResource Empty}, Mode=TwoWay}"/> 
<SomeControl IsChecked="{x:Bind ViewModel.State, Converter={StaticResource Full},  Mode=TwoWay}"/> 

EnumToBooleanIValueConverter将 ac#enum转换为boolean.

它使用该Expected值来确定ViewModel.State是真还是假。这是它的Convert一部分,IValueConverter它有效,没什么特别的。

但是,如果 'boolean' 值为 false ,则ConvertBack需要返回的原始值作为结果。ViewModel.State按预期返回“null”会导致运行时异常。

我尝试了两种方法来获得转换器功能的Original价值ConvertBack

a) 添加另一个字段Original并尝试绑定它

<converters:EnumToBoolean x:Key="Empty" Expected="Empty" Original="{x:Bind ViewModel.State, Mode=OneWay}"/>
<converters:EnumToBoolean x:Key="Full"  Expected="Full"  Original="{x:Bind ViewModel.State, Mode=OneWay}"/> 

这会编译并运行,但会导致运行时异常;因为它试图在转换器被实例化之前绑定到转换器

b) 尝试将其作为ConverterParameter带有嵌入式绑定的 a 传递

<SomeControl IsChecked="{x:Bind ViewModel.State, Converter={StaticResource Empty}, ConverterParameter={x:Bind ViewModel.WallPainter, Mode=OneWay}, Mode=TwoWay}"/> 
<SomeControl IsChecked="{x:Bind ViewModel.State, Converter={StaticResource Full},  ConverterParameter={x:Bind ViewModel.WallPainter, Mode=OneWay}, Mode=TwoWay}"/> 

这根本不编译;它因非描述性错误而失败,没有错误代码或任何点击此处或谷歌......“事件值不能跨越线边界

有没有人建议如何让这些场景中的任何一个工作?

注意-我的临时解决方案远非理想,是制作 Original 转换器的字段 public Func<TEnum> Original { get; set; } 并将其 getter 设置 function 在后面的代码中。我不关心这个选项,因为它会破坏绑定实现策略。

4

0 回答 0