【问题标题】:MvvmCross binding in loop Xamarin.iOS循环 Xamarin.iOS 中的 MvvmCross 绑定
【发布时间】:2018-03-09 09:39:11
【问题描述】:

我遇到了 MvvmCross 的问题。 不知道应该怎么处理。

情况:

我有一个对象叫

MyTempClass 它看起来像这样:

public class MyTempClass
{
    public string ImageName { get; set; }
    public bool IsTheCorrectAnswer { get; set; }
    public bool HasBeenClicked { get; set; }
}

我有一个MyTempClass 的列表。

我从这个列表中迭代并创建一个带有按钮的视图。

对于每个按钮,我可以通过如下命令成功传递我正在迭代的对象:

    for (var i = 0; i < vmExercises.Count;  i++) //This is the list...
        {
            //Create btn & add to the view... 

            var currentExercise = vmExercises[i];
                            set.Bind(btn).WithClearBindingKey(currentExercise.ImageName).To(vm => vm.TestCommand).CommandParameter(currentExercise).Apply();
        }

TestCommand 使用的方法是这样的:

    public IMvxCommand TestCommand => new MvxCommand<MyTempClass>(ATestMethod);

    private void ATestMethod(MyTempClass obj)
    {

        obj.HasBeenClicked = true;
        CurrentTempClass = obj;
    }

问题

我还想在这个循环中绑定按钮的可见性。 我试过这样:

            set.Bind(btn).WithClearBindingKey(currentExercise.ImageName).For("Visible").To(vm => vm.ShouldBeVisible).Apply();

ShouldBeVisible 看起来像这样:

    public bool ShouldBeVisible
    {
        get
        {
            if (CurrentTempClass.IsTheCorrectAnswer && CurrentTempClass.HasBeenClicked)
            {
                return false;
            }

            return true;

        }
    }

问题是:

如果应该隐藏一个按钮,那么所有其他按钮都会被隐藏。

我做错了什么?有其他人这样做过吗?

非常感谢您的帮助! :)

【问题讨论】:

标签: c# xamarin.ios mvvmcross


【解决方案1】:

为了可见性,您应该使用 MvvmCross Visibility 插件:https://www.mvvmcross.com/documentation/plugins/visibility

我还建议: 从你的 getter 和 setter 中删除逻辑。 如果属性得到更新,请在 Visibility.Set 上调用 SetProperty() 以使绑定工作。

【讨论】:

  • 感谢@wishmaster 我通过可见性插件和转换解决了这个问题! :)
  • 乐于帮助@wallef
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多