使用Reflected属性数据进行XAML绑定

时间:2013-03-06 20:17:31

标签: silverlight xaml reflection binding

我有一个简单的类,ClassA(下面)。是否有可能在我的XAML转发器中,我可以将反射的属性名称绑定到文本框,并能够将复选框IsChecked绑定到bool属性?所以我的XAML可能是这样的(这只是伪xaml,不确定它是否在语法上是正确的,并假设ItemsControl数据上下文是ClassA):

<ItemsControl>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <TextBox Text="{Binding ??? reflected property name as text, e.g., ClassABool1 ??? }"
            <CheckBox IsChecked="{Binding ??? somehow bind to the actual property ClassABool1 ???, Mode=TwoWay}"
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>


public sealed class ClassA : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler  PropertyChanged;
    private static ClassA _instance;
    private ClassA() {}

    public static ClassA Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = new ClassA();
            }

            return _instance;
        }
    }

    private bool _classABool1;
    public bool ClassABool1 { get; set; }

    private bool _classABool2;
    public bool ClassABool2 { get; set; }
}

1 个答案:

答案 0 :(得分:0)

这几乎与您描述的完全一致。

创建Binding(在XAML或代码中)时,使用字符串定义目标属性以描述相对于数据上下文的路径。

在下面的示例中,如果将ClassA的实例分配给ContentControl的Content property,则绑定的Data Context将是该实例。

<ContentControl Content="An Instance of ClassA">
    <ContentControl.ContentTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBox Text="{Binding ClassABool1}" />

                <CheckBox IsChecked="{Binding ClassABool1, Mode=TwoWay}" />
            </StackPanel>
        </DataTemplate>
    </ContentControl.ContentTemplate>
</ContentControl>

More on Data Binding here