我在为Windows Phone 8.1开发应用时遇到了问题。
在这种情况下:
我已查找当前位置,并将其存储为代码隐藏中GeoPosition类型的变量。
现在我有一个listview,有地方。每个地方还有一个经度和纬度,存储在geoObject类中。 我的listview有一个datacontext,一个ObservableCollection。 我尝试使用valueConverter来计算当前位置与每个项目位置之间的距离。 我已将当前位置设置为ConverterParameter,但我的猜测是它始终为空,因为系统在listview的datacontext中查找值。 参数的datacontext应该是代码隐藏。
我用pseude代码写了我想做的事情
Text =" {Binding geodata, Converter = {StaticResource DistanceConverter}, ConverterParameter = {Binding currentPosition, 的RelativeSource = myCodeBehind}}"
有没有办法将codebehind设置为仅用于转换器参数的datacontext?
答案 0 :(得分:0)
我建议您将当前位置和ObservableCollection
个地方移动到某个Viewmodel,并将整个窗口的DataContext
设置为此Viewmodel的实例。然后,将ObservableCollection
指定为ListView
' ItemsSource (而不是设置其DataContext
)。
现在,窗口可以访问位置列表和当前位置,因此也可以访问窗口中引用的所有ValueConverters,因为两者都在窗口的Viewmodel中定义。绑定可能看起来类似于以下内容(可能不完全匹配,因为我不知道窗口的确切结构):
Text="{Binding geodata , Converter={StaticResource DistanceConverter}, ConverterParameter={Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.currentPosition}"