【问题标题】:XAML binding using Reflected property data使用反射属性数据的 XAML 绑定
【发布时间】:2013-03-06 20:17:30
【问题描述】:

我有一个简单的类,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; }
}

【问题讨论】:

    标签: silverlight xaml reflection binding


    【解决方案1】:

    这将几乎完全按照您的描述工作。

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

    在以下示例中,如果您将 ClassA 的实例分配给 ContentControl 的 Content property,则您的 Bindings 的 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

    【讨论】:

    • 我了解数据绑定,但我所追求的是:是否可以将 ItemsControl 的 ItemsSource 设置为 ClassA 的属性集合。然后文本框将绑定到属性名称。然后我想绑定到属性值的复选框。所以在原始示例中,假设它运行,将生成 2 个数据项,因为 ClassA 有 2 个属性,第一个数据项将是“ClassABool1”的文本,后跟一个复选框,其 IsChecked 属性绑定到 ClassABool1 的值。第二个数据项将是第一个数据项的副本,但使用 ClassABool2。感谢您的帮助。
    • 所以您想将您的 ItemsControl ItemsSource 绑定到 ClassA 的实例,然后显示每个属性的项目?
    • 不,ItemsControl 源将是 ClassA 的属性集合,TextBox Text 将绑定到 Property.Name,而 CheckBox IsChecked 将以某种方式绑定到实际属性。因此,鉴于上面的 ClassA 具有 2 个属性,我的 ItemsControl 将生成 2 个“行”:第一个“行”:ClassABool1 作为第一个文本框的文本,然后是一个 IsChecked 绑定到 ClassABool1 的复选框。第二“行”:同样的东西,但具有 ClassABool2 属性。归根结底,ClassA 有多少属性并不重要,如果 ClassA 有 20 个属性,那么该过程将针对项目 3-20 重复。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多