Wpf 已给定datacontext的codebehind中的Windows Phone 8.1值转换器参数

Wpf 已给定datacontext的codebehind中的Windows Phone 8.1值转换器参数,wpf,xaml,Wpf,Xaml,我在为windows Phone 8.1开发应用程序时遇到了一个问题 情况是这样的: 我已经查找了我的当前位置,并将其作为Geopposition类型的变量存储在我的codebehind中 现在我有了一个列表视图,带有位置。每个地方也有一个经度和纬度,存储在geoObject类中。 我的listview有一个特定的datacontext,一个ObservableCollection。 我正在尝试使用valueConverter来计算我的当前位置和每个项目的位置之间的距离。 我已经将当前位置设置为

我在为windows Phone 8.1开发应用程序时遇到了一个问题

情况是这样的:

我已经查找了我的当前位置,并将其作为Geopposition类型的变量存储在我的codebehind中

现在我有了一个列表视图,带有位置。每个地方也有一个经度和纬度,存储在geoObject类中。 我的listview有一个特定的datacontext,一个ObservableCollection。 我正在尝试使用valueConverter来计算我的当前位置和每个项目的位置之间的距离。 我已经将当前位置设置为ConverterParameter,但我猜它总是空的,因为系统在listview的datacontext中查找该值。 参数的datacontext应该是codebehind

我已经用pseude代码写了我想做的事情

Text={绑定地理数据, Converter={StaticResource DistanceConverter}, ConverterParameter={Binding currentPosition, RelativeSource=myCodeBehind}


有没有办法将codebehind设置为仅用于converter参数的datacontext?

我建议您将当前位置和可观察的位置集合移动到某个Viewmodel,并将整个窗口的datacontext设置为此Viewmodel的实例。然后,将ObservableCollection指定为ListView的ItemsSource,而不是设置其DataContext

现在,由于位置列表和当前位置都是在窗口的Viewmodel中定义的,因此窗口以及窗口中引用的所有ValueConverter都可以访问它们。绑定可能与以下内容类似,但可能不完全匹配,因为我不知道您窗口的确切结构:

Text="{Binding geodata , Converter={StaticResource DistanceConverter}, ConverterParameter={Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.currentPosition}"