如何从 parent class 的 itemscontrol 绑定 child class 的 属性
How to bind property of child class from itemscontrol of parent class
我有一个项目控件绑定到 parent class 的列表。
我需要在数据模板中绑定 child class 的属性。
这些是我的 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 class
的可观察集合
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. 文本框绑定到 child class 的 属性。
有什么简单的方法可以解决这个问题吗?
如果 ParentList
集合包含不同派生类型(Child1 或 Child2)的元素,您应该有不同的 DataTemplate,这些模板将由 DataType
属性 自动选择。
您可以在 ItemsControl 的资源中声明这些数据模板:
<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>
我有一个项目控件绑定到 parent class 的列表。 我需要在数据模板中绑定 child class 的属性。
这些是我的 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 class
的可观察集合 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. 文本框绑定到 child class 的 属性。
有什么简单的方法可以解决这个问题吗?
如果 ParentList
集合包含不同派生类型(Child1 或 Child2)的元素,您应该有不同的 DataTemplate,这些模板将由 DataType
属性 自动选择。
您可以在 ItemsControl 的资源中声明这些数据模板:
<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>