如何从XAML绑定到CLR属性中保存的DependencyProperty实例?
我正在尝试生成“设置”列表(用户可以通过复选框列表修改应用设置。)
我希望从某个类(MyOptions)中的依赖项属性动态创建列表。我已经实现了,我将ListBox绑定到此列表(这是DependencyProperty objs的列表)
public IEnumerable<OptionProperty> AvailableOptions
{
get
{
return from property in GetAttachedProperties(MyOptions)
where property.GetMetadata(MyOptions) is OptionPropertyMetaData
select new OptionProperty { OptionName = property.Name, OptionType = property.PropertyType, OptionDependencyProperty = property };
}
}
我需要做的是将DataTemplate中的复选框(对于ListBox)绑定到列表中的DependencyProperty项。
所以当然这不会起作用
<DataTemplate DataType="{x:Type local:OptionProperty}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="30"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Path=OptionName}" />
<CheckBox Grid.Column="1" HorizontalAlignment="Right" IsChecked="{Binding Path=OptionDependencyProperty}"></CheckBox>
</Grid>
</DataTemplate>
因为它只是绑定到名为OptionDependencyProperty的OptionProperty的属性,而不是OptionDependencyProperty中引用的DependencyProperty。
那么如何从XAML绑定到CLR属性(OptionDependencyProperty)中保存的DependencyProperty实例?
我认为我的脑堆已满,无法再处理抽象:(
谢谢!
答案 0 :(得分:0)
DependencyProperty
不是值容器。它是一个标识符,可用于获取/设置特定实例的值。
而不是问“这个依赖属性的价值是多少?”你想问,“这个实例的依赖属性的值是多少?”
您可能最好绑定到OptionProperty
课程中的其他媒体资源。
有些事情:
public class OptionProperty : INotifyPropertyChanged
{
public MyOptions MyOptions { get; set; }
public DependencyProperty OptionDependencyProperty { get; set; }
public object Value
{
get
{
return MyOptions.GetValue(OptionDependencyProperty);
}
set
{
MyOptions.SetValue(OptionDependencyProperty, value);
RaisePropertyChanged("Value");
}
}
// TODO Implement INotifyPropertyChanged
// TODO All of the other properties
}
然后,您可以绑定到Value属性,该属性将为DependencyProperty
实例上的MyOptions
获取并设置适当的值。