Xamarin Forms ConverterParameter - 如何引用当前项属性?

时间:2016-06-05 23:47:35

标签: xamarin xamarin.forms

我的目标如下:

public class MyObj {
  public string Name {get; set;}
  public double Weight {get; set;}
}

我从这个类创建一个ObservableCollection对象,并将它分配给ListView的ItemsResource(下面的lvMyObjs)。我也有一个条目。

我需要为ListView中的每一行执行以下操作

  • 从条目中获取值并将其传递给转换器
  • 将条目值与转换器中当前项的Weight属性相乘
  • 在列表视图的相应行中显示值。

在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 = {},”?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以将MyObj传递给转换器,然后使用x:Reference作为参数。{/ p>

Entry

然后

<Label x:Name="lblResult" Text="{Binding Path=. ,                            
                      Converter={StaticResource myConverter},
                      ConverterParameter={x:Reference entSourceValue}
                      }"/>

我还没有测试过这个。添加您自己的类型检查,但这应该有助于您。