2013-03-06 63 views
0

我有一个简单的类,ClassA(如下)。是否有可能在我的XAML中继器中,我可以将反射的属性名称绑定到文本框,并且能够将复选框IsChecked绑定到bool属性?所以,我的XAML可能是这样的(这仅仅是伪XAML,不知道这是否是语法正确,并承担ItemsControl的数据上下文为ClassA的):使用反射属性数据的XAML绑定

<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; } 
} 

回答

0

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

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

在以下示例中,如果将ContentA的实例分配给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

+0

我理解数据绑定,但什么后我:是否有可能ItemsControl的的的ItemsSource设置为ClassA的的属性集合。然后文本框将绑定到属性名称。然后,我想要将该复选框绑定到属性值。 因此,在原始示例中,假设它运行,将生成2个数据项,因为ClassA有2个属性,第一个数据项将是'ClassABool1'的文本,后面跟着一个复选框,其IsChecked属性绑定到ClassABool1的值。第二个数据项将是第一个数据项的副本,但使用ClassABool2。谢谢您的帮助。 – 2013-03-07 15:36:52

+0

所以你想要将你的ItemsControl ItemsSource绑定到ClassA的实例,然后显示每个属性的项目? – 2013-03-07 16:15:53

+0

不,ItemsControl源将是ClassA的属性集合,TextBox文本将绑定到Property.Name,并且CheckBox IsChecked会以某种方式绑定到实际属性。因此,如果ClassA上面有两个属性,我的ItemsControl会产生2个“行”:第一个“行”:ClassABool1作为第一个文本框的文本,后面跟着一个复选框,其IsChecked被绑定到ClassABool1。第二个“行”:同样的事情,但与ClassABool2属性。最终,ClassA具有多少属性并不重要,如果ClassA具有20个属性,则对于项目3-20重复该过程。再次感谢! – 2013-03-07 16:29:00