定义要绑定到的自定义属性
是否有可能将用户控件中的控件项绑定到名称通过绑定指定的属性?
像这样的东西,但没有产生错误:
<ItemsControl ItemsSource='{Binding Path=CheckListItems, ElementName=Root}'> <ItemsControl.ItemTemplate> <DataTemplate> <!-- What should I put below to replace the inner binding? --> <CheckBox Content='{Binding Path={Binding Path=ItemPropertyName, ElementName=Root}, Mode=OneTime}' /> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl>
哪里
CheckListItems
(DP)是项目的集合(IList<SomeCustomContainerType>)
ItemPropertyName
(DP)是SomeCustomContainerType
中属性的SomeCustomContainerType
,应该显示为复选框文本 Root
是用户控件的名称 在这种情况下的例外是(预计)如下:
A 'Binding' cannot be set on the 'Path' property of type 'Binding'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.
基本上我想通过属性名称的文本应该显示在复选框外面的某种方式。 它不必是可绑定的,但应该从使用用户控件的XAML进行设置。
你有没有试过使用DisplayMemberPath?
这里是一个如何使用它的例子
试试这个,看看它是否有效:
<ItemsControl ItemsSource="{Binding Path=CheckListItems, ElementName=Root}" DisplayMemberPath="{Binding ItemPropertyName, ElementName=Root}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<!-- What should I put below to replace the inner binding? -->
<CheckBox Content="{Binding Mode=OneTime}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
一种可能性是将ValueConverter与ConverterParameter一起用作属性的名称。 在ValueConverter实现中,您可以使用反射来加载值。
转换器可能看起来像这样:
[ValueConversion(typeof(string), typeof(string))]
public class ReflectionConverter : IValueConverter
{
public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (parameter != null)
{
Type type = value.GetType();
System.Reflection.PropertyInfo prop = type.GetProperty (parameter.ToString());
return prop.GetValue(value, null);
}
return value;
}
public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}
简单地用你的线代替:
<CheckBox Content="{Binding ItemPropertyName}" />
链接地址: http://www.djcxy.com/p/7757.html