Как связать класс, который наследуется от коллекции wpf - PullRequest
0 голосов
/ 25 октября 2018

Я довольно новичок в 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 объекта

Как я могу это связать?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Проблема в том, что вы явно добавляете ListBoxItem в ListBox.

Вы, вероятно, хотели бы вместо этого определить 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;
}
0 голосов
/ 25 октября 2018

Я думаю, что проблема в неуместном определении соблюдаемой коллекции.В любом случае для учебного сценария попробуйте вместо этого использовать стандартный предопределенный System.ObservableCollection <>.Коллекция также должна быть инициализирована (не nbe null) в этом небольшом эксперименте ...

Итак, в вашем случае, попробуйте следующее:

ObservablledCollection<Child> childs = new ObservableCollection<Child>;

public MainWindow()
{
    InitializeComponent();
    DataContext = childs;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...