gpt4 book ai didi

mvvmcross - MvvmCross 数据绑定(bind)中的枚举支持

转载 作者:行者123 更新时间:2023-12-04 21:40:25 24 4
gpt4 key购买 nike

我在 View 模型中有一个枚举属性,如果属性值是特定值,我想使标签可见

States state;
public States State
{
get { return this.state; }
set
{
if (this.state != value)
{
this.state = value;
this.RaisePropertyChanged("State");
}
}
}

public enum States
{
Stopped,
Runnning
}

这是我在 UI 中尝试的内容:

local:MvxBind="Visibility If(State==1, 'Visible', 'Gone')"

但它不起作用。日志中没有错误显示。

我可以做一个转换器,但我想知道没有它是否可以做到这一点。

如果我修改 State 属性以使用 int 而不是 Enum,它就可以正常工作。我想这与当前枚举类型的处理方式有关。

最佳答案

在 Tibet 绑定(bind)插件中,语句如下:

 If(State==1, 'Visible', 'Gone'

由于 iOS JIT 的限制,它们没有被编译——而是被评估。

遗憾的是,如果不使用动态代码,像 == 这样的操作符的评估结果是相当困难的...

因此,Tibet == 运算符试图做的是将右侧和左侧缩小为以下三种类型之一:long doubleobject - 它使用:

    private Type GetLookupTypeFor(object value)
{
if (value == null)
return null;
if (value is long)
return typeof(long);
if (value is double)
return typeof (double);
return typeof (object);
}

来自 https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Binding/Combiners/MvxPairwiseValueCombiner.cs#L36

确定这些类型后,它会调用这些方法之一,每个方法都使用左侧类型的 == 运算符,如果两种类型都是 .Equals 对象:

    protected override bool CombineDoubleAndDouble(double input1, double input2, out object value)
{
value = input1 == input2;
return true;
}
protected override bool CombineDoubleAndLong(double input1, long input2, out object value)
{
value = input1 == input2;
return true;
}
// ... etc

来自 https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Binding/Combiners/VeryExperimental/MvxEqualToValueCombiner.cs

对于 State==1enum 情况,我认为左边将被识别为一个 object 而右边- hand 作为 long - 所以它们永远不会相等,因为:

    protected override bool CombineObjectAndLong(object input1, long input2, out object value)
{
value = false;
return true;
}

使用当前代码,我认为让测试工作的唯一方法是将左侧和右侧都设置为 longstring

您可以在枚举上使用值转换器来做到这一点 - 例如一个 ToStringValueConverter 或一个 ToLongValueConverter 然后你可以像这样使用:

 If(ToLong(State)==1, 'Visible', 'Gone'

或:

 If(ToString(State)=='Running', 'Visible', 'Gone'

显然,展望 future ,这个领域也可以在 Mvx 内部得到改进——无论是在 SwissTibet

之外的任何地方

关于mvvmcross - MvvmCross 数据绑定(bind)中的枚举支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21417754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com