Silverlight 这个绑定语法有什么问题:{binding List[Index]}?
给定一个数据对象:{List=new Int32[]{0,1,2,3},Index=2},我希望使用以下语法将其绑定到控件:Silverlight 这个绑定语法有什么问题:{binding List[Index]}?,silverlight,xaml,data-binding,Silverlight,Xaml,Data Binding,给定一个数据对象:{List=new Int32[]{0,1,2,3},Index=2},我希望使用以下语法将其绑定到控件: {Binding List[Index]} 这不起作用,也不会抛出任何异常。我也无法通过将转换器附加到此绑定来查看发生了什么 只要我能做{Binding List[0]}这个到底为什么不起作用:{Binding List[Index]}?在解析XAML时会计算绑定表达式。因此,在那里使用的值必须是编译时常量,以便可以将它们构建到稍后用于绑定的表达式中 因此,一种方法是在
{Binding List[Index]}
这不起作用,也不会抛出任何异常。我也无法通过将转换器附加到此绑定来查看发生了什么
只要我能做{Binding List[0]}这个到底为什么不起作用:{Binding List[Index]}?在解析XAML时会计算绑定表达式。因此,在那里使用的值必须是编译时常量,以便可以将它们构建到稍后用于绑定的表达式中 因此,一种方法是在ViewModel上创建一个属性,公开要绑定到的列表项
不幸的是,这里也没有选择使用ValueConverter,因为您无法绑定到绑定表达式的ConverterParameter,因此转换器也不知道索引…解析XAML时会计算绑定表达式。因此,在那里使用的值必须是编译时常量,以便可以将它们构建到稍后用于绑定的表达式中 因此,一种方法是在ViewModel上创建一个属性,公开要绑定到的列表项
不幸的是,这里也没有使用ValueConverter的选项,因为您无法绑定到绑定表达式的ConverterParameter,因此转换器也不知道索引…为此,您必须使用带转换器的多重绑定,因为索引本身需要绑定 例如 和转换器: 公共类名称转换器:IMultiValueConverter { 公共对象Convertobject[]值,类型targetType,对象参数,CultureInfo区域性 { 如果values.Length!=2 | |!值[0]为IList | |!值[1]为int 不做任何事; var list=IListValue[0]; var指数=intvalues[1]; 如果索引<0 | |索引>=list.Count 不做任何事; 返回列表[索引]; } 公共对象[]ConvertBackobject值,类型[]targetTypes,对象参数,CultureInfo区域性 { 不做任何事; } } Silverlight的多绑定解决方案由谷歌提供: SL3: SL4:
SL5:您必须使用带转换器的多重绑定,因为索引本身需要绑定 例如 和转换器: 公共类名称转换器:IMultiValueConverter { 公共对象Convertobject[]值,类型targetType,对象参数,CultureInfo区域性 { 如果values.Length!=2 | |!值[0]为IList | |!值[1]为int 不做任何事; var list=IListValue[0]; var指数=intvalues[1]; 如果索引<0 | |索引>=list.Count 不做任何事; 返回列表[索引]; } 公共对象[]ConvertBackobject值,类型[]targetTypes,对象参数,CultureInfo区域性 { 不做任何事; } } Silverlight的多绑定解决方案由谷歌提供: SL3: SL4:
SL5:不幸的是,默认情况下Silverlight中没有IMultiValueConverter。您介意给出一个基于IValueConverterGreat解决方案的实现吗。我没有想到多重绑定,因为Silverlight本身不支持多重绑定……不幸的是,默认情况下Silverlight中没有IMultiValueConverter。您介意给出一个基于IValueConverterGreat解决方案的实现吗。我没有想到多重绑定,因为Silverlight本身不支持它。。。
<MyControl>
<MyControl.Text>
<MultiBinding Converter="{StaticResource yourConverter}">
<MultiBinding.Bindings>
<Binding Path="List" />
<Binding Path="Index" />
</MultiBinding.Bindings>
</MultiBinding>
</MyControl.Text>
</MyControl>