繁体   English   中英

如何从父类的ItemsControl绑定子类的属性

[英]How to bind property of child class from itemscontrol of parent class

我有一个绑定到父类列表的项目控件。 我需要在数据模板中绑定子类的属性。

这些是我上的课

public class Parent {

    private string _name;
     public string Name
        {
            get { return _name; }
            set
            {
                if (Equals(value, _name)) return;
                _name = value;
                OnPropertyChanged(nameof(Name));
            }
        }
}


public class Child1 : Parent{

    private string _prob1;
     public string Prob1
        {
            get { return _prob1; }
            set
            {
                if (Equals(value, _prob1)) return;
                _prob1= value;
                OnPropertyChanged(nameof(Prob1));
            }
        }
}

public class Child2 : Parent{

    private string _prob2;
     public string Prob2
        {
            get { return _prob2; }
            set
            {
                if (Equals(value, _prob2)) return;
                _prob2= value;
                OnPropertyChanged(nameof(Prob2));
            }
        }
}

在我的视图模型中,我有一个可观察的Parent类集合

 public ObservableCollection<Parent> ParentList { get; set; }

和我的XAML代码

 <ItemsControl  ItemsSource="{Binding ParentList }">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate  
              DataType="domainObject:Child1">

<TextBlock Text="{Binding Name}" Margin="5" IsEnabled="False"  HorizontalAlignment="Center" Height="22" Background="Transparent" />

<TextBlock Text="{Binding Prob1}" Margin="5"HorizontalAlignment="Center" Height="22" />


我想将2.文本框绑定到子类的属性。

有没有简单的方法可以解决此问题?

如果ParentList集合包含不同派生类型的元素(Child1或Child2),则您应该具有不同的DataTemplates,它们将由其DataType属性自动选择。

您可以在ItemsControl的资源中声明这些DataTemplates:

<ItemsControl ItemsSource="{Binding ParentList}">
    <ItemsControl.Resources>
        <DataTemplate DataType="{x:Type domainObject:Child1}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Name}" ... />
                <TextBlock Text="{Binding Prob1}" ... />
            </StackPanel>
        </DataTemplate>
        <DataTemplate DataType="{x:Type domainObject:Child2}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Name}" ... />
                <TextBlock Text="{Binding Prob2}" ... />
            </StackPanel>
        </DataTemplate>
    </ItemsControl.Resources>
</ItemsControl>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM