我是wpf的新手,我在使用简单的ListBox
绑定时遇到了麻烦。
是这种情况,我有两个案例
public class Child, ImplementedPropertyChanged
{
private string _name;
public string Name
{
get => _name;
set
{
_name = value;
OnPropertyChanged();
}
}
}
public class ChildCollection : IObservableCollection<Child>
{
new public void Add(Child child)
{
//some logic
base.Add(child);
}
}
我正在尝试将其绑定到xaml
<Window x:Class="GeneradorDeCarpetaPlanos.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:GeneradorDeCarpetaPlanos"
xmlns:VM="clr-namespace:GeneradorDeCarpetaPlanos.ViewModel"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.DataContext>
<VM:ChildCollection></VM:ChildCollection>
</Window.DataContext>
<StackPanel>
<ListBox ItemsSource="{Binding}">
<ListBoxItem>
<TextBlock Text="{Binding Path=Name}"></TextBlock>
</ListBoxItem>
</ListBox>
</StackPanel>
</Window>
在
后面的代码中ChildCollection childs = null;
public MainWindow()
{
childs = new ChildCollection();
InitializeComponent();
DataContext = childs;
}
我尝试将Count
属性绑定到一个简单的TextBlock
,并且显示Count
,但没有使用ChildCollection
对象进行更新
我应该如何绑定它?
谢谢!
答案 0 :(得分:1)
问题是您将ListBoxItem
显式添加到列表框。
您可能想改为定义ItemTemplate
:
<ListBox ItemsSource="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
您还应该考虑使用ObservableCollection而不是创建自己的集合类:
private readonly ObservableCollection<Child> children = new ObservableCollection<Child>();
public MainWindow()
{
InitializeComponent();
DataContext = children;
}
答案 1 :(得分:0)
我认为问题出在可可收集的不恰当定义中。无论如何,对于学习场景,请尝试使用标准的预定义System.ObservableCollection <>。在这个小实验中,还必须初始化集合(不是nbe null)...
因此,在您的情况下,请尝试以下操作:
ObservablledCollection<Child> childs = new ObservableCollection<Child>;
public MainWindow()
{
InitializeComponent();
DataContext = childs;
}