使用转换器对行为进行绑定命令
Binding command on behavior with a converter
我正在做一个 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
参数=空
culture = null
我所有 C# 代码的 Convert() 参数错误:
value = DelegateCommand
targetType = ICommand
参数=空
文化 = {fr-FR}
谁能告诉我我哪里错了?
非常感谢!
我不确定我是否足够好地重现了你的案例,但这是我想到的。
behavior.SetBinding(ListViewPagingBehavior.CommandProperty, "LoadMoreLeadOfTheDateCommand", BindingMode.Default, new ItemVisibilityEventArgsConverter());
此处您使用转换器来转换您绑定的内容,这意味着您正在转换 "LoadMoreLeadOfTheDateCommand"。这就是您将 DelegateCommand 作为值的原因。您的绑定应如下所示:
behavior.SetBinding(ListViewPagingBehavior.CommandProperty, "LoadMoreLeadOfTheDateCommand");
然后只需使用您的行为的 ConverterProperty(或您所称的任何名称):
behavior.Converter = new ItemVisibilityEventArgsConverter();
顺便说一下,这就是您在 XAML 中所做的事情。不管怎样,这对我有用,我希望它也对你有用:)
我不知道是什么 ListViewPagingBehavior
所以我只能猜测,但看看这个语法:
<ListView.Behaviors>
<bh:ListViewPagingBehavior
Command="{Binding LoadMoreLeadOfTheDateCommand}"
Converter="{StaticResource ItemVisibilityConverter}">
</bh:ListViewPagingBehavior>
</ListView.Behaviors>
Converter
是 ListViewPagingBehavior
的 属性 而不是 {Binding}
的 属性 (有一个可见性转换器到转换器看起来很另一方面,很奇怪)。
等效的 C# 如下所示:
var behavior = new ListViewPageBindingBehavior();
behavior.SetBinding(ListViewPageBindingBehavior.CommandProperty, "LoadMoreLeadOfTheDateCommand");
behavior.Converter = new ItemVisibilityConverter();
myListView.Behaviors.Add (behavior);
我正在做一个 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
参数=空
culture = null
我所有 C# 代码的 Convert() 参数错误:
value = DelegateCommand
targetType = ICommand
参数=空
文化 = {fr-FR}
谁能告诉我我哪里错了? 非常感谢!
我不确定我是否足够好地重现了你的案例,但这是我想到的。
behavior.SetBinding(ListViewPagingBehavior.CommandProperty, "LoadMoreLeadOfTheDateCommand", BindingMode.Default, new ItemVisibilityEventArgsConverter());
此处您使用转换器来转换您绑定的内容,这意味着您正在转换 "LoadMoreLeadOfTheDateCommand"。这就是您将 DelegateCommand 作为值的原因。您的绑定应如下所示:
behavior.SetBinding(ListViewPagingBehavior.CommandProperty, "LoadMoreLeadOfTheDateCommand");
然后只需使用您的行为的 ConverterProperty(或您所称的任何名称):
behavior.Converter = new ItemVisibilityEventArgsConverter();
顺便说一下,这就是您在 XAML 中所做的事情。不管怎样,这对我有用,我希望它也对你有用:)
我不知道是什么 ListViewPagingBehavior
所以我只能猜测,但看看这个语法:
<ListView.Behaviors>
<bh:ListViewPagingBehavior
Command="{Binding LoadMoreLeadOfTheDateCommand}"
Converter="{StaticResource ItemVisibilityConverter}">
</bh:ListViewPagingBehavior>
</ListView.Behaviors>
Converter
是 ListViewPagingBehavior
的 属性 而不是 {Binding}
的 属性 (有一个可见性转换器到转换器看起来很另一方面,很奇怪)。
等效的 C# 如下所示:
var behavior = new ListViewPageBindingBehavior();
behavior.SetBinding(ListViewPageBindingBehavior.CommandProperty, "LoadMoreLeadOfTheDateCommand");
behavior.Converter = new ItemVisibilityConverter();
myListView.Behaviors.Add (behavior);