首页 文章

绑定命令对转换器的行为

提问于
浏览
0

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

我在listview上有一个行为,它正在使用转换器对命令进行绑定 . 我用XAML和C#做到了它并且它工作得很好 .

XAML part :

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

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

I tried to traduce this XAML like this :

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

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

My Converter :

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();
    }
}

Good parameters of Convert() with the working code :

  • value = Xamarin.Forms.ItemVisibilityEventArgs

  • targetType = System.Object

  • parameter = null

  • culture = null

Bad parameters of Convert() with my all C# code :

  • value = DelegateCommand

  • targetType = ICommand

  • parameter = null

  • culture =

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

2 回答

  • 0

    我不确定我是否已经很好地复制了你的情况,但这就是我提出的问题 .

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

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

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

    然后只使用你的行为的ConverterProperty(或你称之为的任何东西):

    behavior.Converter = new ItemVisibilityEventArgsConverter();
    

    就像你在XAML中所做的那样 . 无论如何,这对我有用,我希望它也适合你:)

  • 0

    我不知道 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);
    

相关问题