我的目标如下:
public class MyObj {
public string Name {get; set;}
public double Weight {get; set;}
}
我从这个类创建一个ObservableCollection对象,并将它分配给ListView的ItemsResource(下面的lvMyObjs)。我也有一个条目。
我需要为ListView中的每一行执行以下操作
在XAML中,我有这个:
<Entry x:Name="entSourceValue"/>
<ContentPage.Resources>
<ResourceDictionary>
<local:SourceToTargetConverter x:Key="myConverter" />
</ResourceDictionary>
</ContentPage.Resources>
<ListView x:Name="lvMyObjs">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ContentView>
<Frame>
<StackLayout Orientation="Horizontal">
<Label Text="{Binding Name}" />
<Label x:Name="lblResult"
Text="{
Binding Text,
Converter={StaticResource myConverter},
ConverterParameter={},
Source={x:Reference entSourceValue}
}"/>
</StackLayout>
</Frame>
</ContentView>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
在我的转换器中,我有这个:
public class SourceToTargetConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
double sourceDouble;
double.TryParse((string)value, out sourceDouble);
//todo: convert parameter to double
//double weight =
return sourceDouble * weight;
}
}
我可以在转换器中获得我的条目值,没有任何问题。我的问题是如何将列表视图中当前项目的“权重”作为参数发送给转换器?换句话说,我该怎么做 “ConverterParameter = {},”?
非常感谢任何帮助。
答案 0 :(得分:1)
您可以将MyObj
传递给转换器,然后使用x:Reference
作为参数。{/ p>
Entry
然后
<Label x:Name="lblResult" Text="{Binding Path=. ,
Converter={StaticResource myConverter},
ConverterParameter={x:Reference entSourceValue}
}"/>
我还没有测试过这个。添加您自己的类型检查,但这应该有助于您。