[英]In the following example from .Net Maui XAML 2009, why does the RelativeSource fail to get the Picker?
<Picker>
<Picker.ItemsSource>
<c:List x:TypeArguments="x:String">
<x:String>apple</x:String>
<x:String>orange</x:String>
</c:List>
</Picker.ItemsSource>
<Picker.SelectedItem>
<Binding>
<Binding.Converter>
<local:SampleConverter SampleBindable="{Binding ItemsSource, Source={RelativeSource FindAncestor, AncestorType={x:Type Picker}}}" />
</Binding.Converter>
</Binding>
</Picker.SelectedItem>
</Picker>
我的理解是,我可以通过在FindAncestor的AncestorType中指定“Picker”来获取Picker控件,但似乎并非如此。 谁能解释为什么?
如果我给 Picker 一个名字并将 RelativeSource 更改为 x:Reference 如下所示,我可以成功获取它(“SampleBindable”属性反映了 Picker 的 ItemsSource 的内容)。
<Picker x:Name="pick">
<local:SampleConverter SampleBindable="{Binding ItemsSource, Source={x:Reference pick}}" />
但是,每次只为这些绑定命名控件似乎有些多余……有谁知道避免命名 Picker 控件的方法吗?
Source
通常用于静态寻址位于其他地方的源。 如果你想爬树寻找亲戚父类,你可以使用RelativeSource
代替。 尝试这个:
<local:SampleConverter SampleBindable="{Binding ItemsSource,
RelativeSource={RelativeSource AncestorType={x:Type Picker}}}" />
根据您的代码,您没有绑定到祖先。 官方文件说:
FindAncestor 和 FindAncestorBindingContext 相对绑定模式用于绑定到可视化树中某种类型的父元素
选择器不是父元素。 而且我好像只能在xaml里面找一个picker,好像是绑定到自己的。 所以你可以尝试:
<local:SampleConverter SampleBindable="{Binding Source={RelativeSource Self}, Path=ItemsSource />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.