【问题标题】:Binding command on behavior with a converter与转换器的行为绑定命令
【发布时间】:2017-02-20 05:31:41
【问题描述】:

我正在开发一个 Xamarin.Forms 项目。

我在列表视图上有一个行为,它正在使用转换器对命令进行绑定。我使用 XAML 和 C# 完成了它,并且运行良好。

XAML 部分:

<ListView.Behaviors>
  <bh:ListViewPagingBehavior
    Command="{Binding LoadMoreLeadOfTheDateCommand}"
    Converter="{StaticResource ItemVisibilityConverter}">
  </bh:ListViewPagingBehavior>
</ListView.Behaviors>

但现在我只需要在代码隐藏上执行此过程,因为我需要在代码隐藏中创建我的列表视图。

我试图像这样引用这个 XAML:

ListViewPagingBehavior behavior = new ListViewPagingBehavior();
behavior.SetBinding(ListViewPagingBehavior.CommandProperty, "LoadMoreLeadOfTheDateCommand", BindingMode.Default, new ItemVisibilityEventArgsConverter());
myListView.Behaviors.Add(behavior);

不幸的是,IValueConverter 没有在 Convert() 方法中检索到与以前相同的参数...

我的转换器:

public class ItemVisibilityEventArgsConverter : IValueConverter
{
    public object Convert (object value, Type targetType, object parameter, CultureInfo culture)
    {
        var eventArgs = value as ItemVisibilityEventArgs;
        return eventArgs.Item;
    }

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

Convert() 的良好参数与工作代码:

  • 值 = Xamarin.Forms.ItemVisibilityEventArgs

  • targetType = System.Object

  • 参数 = null

  • culture = null

我的所有 C# 代码中的 Convert() 参数错误:

  • value = DelegateCommand

  • targetType = ICommand

  • 参数 = null

  • 文化 = {fr-FR}

谁能告诉我我哪里错了? 非常感谢!

【问题讨论】:

    标签: c# listview xamarin.forms behavior ivalueconverter


    【解决方案1】:

    我不确定我是否足够好地复制了您的案例,但这是我想出的。

    behavior.SetBinding(ListViewPagingBehavior.CommandProperty, "LoadMoreLeadOfTheDateCommand", BindingMode.Default, new ItemVisibilityEventArgsConverter());
    

    在这里,您使用转换器来转换您正在绑定的内容,这意味着您正在转换“LoadMoreLeadOfTheDateCommand”。这就是为什么您将 DelegateCommand 作为价值。您的绑定应如下所示:

    behavior.SetBinding(ListViewPagingBehavior.CommandProperty, "LoadMoreLeadOfTheDateCommand");
    

    然后只需使用您的行为的 ConverterProperty(或您所称的任何名称):

    behavior.Converter = new ItemVisibilityEventArgsConverter();
    

    顺便说一句,这就是您在 XAML 中所做的事情。无论如何,这对我有用,我希望它也对你有用:)

    【讨论】:

    • 我不知道为什么,我没有看到该行为具有转换器属性。它现在工作得很好。谢谢你的时间 maddhew :)
    【解决方案2】:

    我不知道ListViewPagingBehavior 是什么,所以我只能猜测,但是看看这个语法:

    <ListView.Behaviors>
      <bh:ListViewPagingBehavior
        Command="{Binding LoadMoreLeadOfTheDateCommand}"
        Converter="{StaticResource ItemVisibilityConverter}">
      </bh:ListViewPagingBehavior>
    </ListView.Behaviors>
    

    ConverterListViewPagingBehavior 的属性,而不是{Binding} 的属性(另一方面,将可见性转换器转换为转换器似乎很奇怪)。

    等效的 C# 如下所示:

    var behavior = new ListViewPageBindingBehavior();
    behavior.SetBinding(ListViewPageBindingBehavior.CommandProperty, "LoadMoreLeadOfTheDateCommand");
    behavior.Converter = new ItemVisibilityConverter();
    
    myListView.Behaviors.Add (behavior);
    

    【讨论】:

    • 就是这样,我没有看到行为的转换器属性。非常感谢,现在可以使用了!
    猜你喜欢
    • 2012-03-01
    • 2013-10-08
    • 2011-02-19
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多