MVVM , wiązanie (binding) treści do listbox

0

Cześć , szukam pomocy w znalezieniu gdzie popełniłem błąd . Jest klasa która serwuję listę z danymi dla ListBoxa . Całość jest realizowana przy pomocy wiązań (binding) . Program się kompiluje , uruchamia bez błędów .Szkopuł w tym że wynik działania jest co najmniej dziwny ,Treść trafia do listboxa ale jej nie widać . Kod i wynik działania programu poniżej . Ktoś ,coś oświeci człowieka :)

using NetFrameworkInstallerWPF.AppModel;
using System.Collections.ObjectModel;
using System.ComponentModel;

namespace NetFrameworkInstallerWPF.VievModel
{
    internal abstract class _viewwmodelbase : INotifyPropertyChanged
    {
        #region Property Changed Event Handler
        public void SetPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
        public event PropertyChangedEventHandler PropertyChanged;
        #endregion Property Changed Event Handler
    }
    internal struct _etaps
    {
        internal string msg;
    }

    internal class _viewmodel:_viewwmodelbase
    {
        private _appmodel AppModel;
        private ObservableCollection<_etaps> ocstages;

        public _viewmodel()
        {
            if (AppModel == null) { AppModel = new _appmodel(); }
            if (ocstages == null) { ocstages=new ObservableCollection<_etaps>(); }

            ocstages.Add(new _etaps() { msg = "Przykładowy tekst" });
            SetPropertyChanged(nameof(lbox));
        }
        public ObservableCollection<_etaps> lbox
        {
            get
            {                
                return ocstages;
            }
        }
    }
}
```csharp
<Window x:Class="NetFrameworkInstallerWPF.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:NetFrameworkInstallerWPF"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        xmlns:vm="clr-namespace:NetFrameworkInstallerWPF.VievModel"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="300">    
        <Window.DataContext>
        <vm:_viewmodel/>
    </Window.DataContext>    
    <Grid Margin="5,5,5,5" HorizontalAlignment="Center" VerticalAlignment="Center">
        <ListBox ItemsSource="{Binding lbox}" HorizontalAlignment="Center" Height="370" Margin="10,10,10,10" VerticalAlignment="Center" Width="227">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding msg}"></TextBlock>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>            
        </ListBox>
    </Grid>
</Window>

screenshot-20200510130104.png

1

WPF do Bindowania potrzebuje właściwości z publicznym getter'em. W output powinieneś mieć info, że Binding nie znajduje właściwości.
To powinno działać:

public string msg { get; set; }
0

Cześć Piotrze , dzięki za odpowiedź , rozwiązała mój problem :)

Piotr.Net napisał(a):

WPF do Bindowania potrzebuje właściwości z publicznym getter'em. W output powinieneś mieć info, że Binding nie znajduje właściwości.
To powinno działać:

public string msg { get; set; }

1 użytkowników online, w tym zalogowanych: 0, gości: 1