我正在开发一个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 回答
我不确定我是否已经很好地复制了你的情况,但这就是我提出的问题 .
在这里,您使用转换器来转换您绑定的内容,这意味着您正在转换“LoadMoreLeadOfTheDateCommand” . 这就是为什么你将DelegateCommand作为值 . 您的绑定应如下所示:
然后只使用你的行为的ConverterProperty(或你称之为的任何东西):
就像你在XAML中所做的那样 . 无论如何,这对我有用,我希望它也适合你:)
我不知道
ListViewPagingBehavior
所以我只能猜测,但看看这个语法:Converter
是ListViewPagingBehavior
的属性,而不是{Binding}
的属性(另一方面,转换器的可见性转换器看起来很奇怪) .等效的C#就是这样的: