C# WPF Problem z ustawieniem ItemsSource

0

Witam, mam problem z ustawieniem ItemsSource dla kontrolki ListView od "strony Xamla", codebehind działa częściowo xd. Przeszukałem msdn, stackoverflow, ale ni cholery nie wiem czemu to nie działa.

W codebehind pomimo ustawienia DisplayMemberPath nic się nie zmieniło w zakresie prezentowanych danych :<

Okienko

<Window <!-- {...} -->
     <Window.DataContext>
        <local:SViewModel/>
    </Window.DataContext>
      >
      <Grid>
      <!-- {...} -->
        <ListView x:Name="CB" SelectionChanged="CompletionBrowser_SelectionChanged" Background="{DynamicResource BackgroundBrush}" BorderThickness="0" IsSynchronizedWithCurrentItem="True" DisplayMemberPath="Display" ItemsSource="{Binding Hints}">
            <ListView.Resources>
                    <!-- {...} -->
            </ListView.Resources>
        </ListView>
              <Border Grid.Row="2" Grid.RowSpan="1" Grid.ColumnSpan="1" Background="{DynamicResource BackgroundBrush3}" BorderThickness="0">
            <TextBlock x:Name="Description" Focusable="False" Foreground="WhiteSmoke" Text="{Binding Selected.Description, ElementName=CB}"/>
        </Border>
      </Grid>
</Window>

Codebehind

    public partial class UserControl1 : Window
    {
        SViewModel ViewModel;

        public UserControl1()
        {
            InitializeComponent();
            SViewModel = new SViewModel();
            DataContext = ViewModel;
        }
    }

SViewModel

    public sealed class SViewModel
    {
        public readonly ObservableCollection<Hint> Hints;

        public SViewModel()
        {
            Hints = new ObservableCollection<Hint>();
        }
    }

Hint

    public class Hint
    {
        public readonly string Display;
        public readonly string Description;
        public readonly string GroupName;

        public Hint(string Display, string Description, string GroupName = "")
        {
            this.Display = Display;
            this.Description = Description;

            if (GroupName == null)
                GroupName = string.Empty;

            this.GroupName = GroupName;
        }
    }

Z góry dzięki.

0

A co konkretnie nie działa? Bo tutaj widzę kilka błędów.

0

pomijając literówki, to binduje się do propertisów, nie do pól

0

Obecnie:

<ListView x:Name="CB" SelectionChanged="CompletionBrowser_SelectionChanged" Background="{DynamicResource BackgroundBrush}" BorderThickness="0" DisplayMemberPath="Display" ItemsSource="{Binding}"/>
    public partial class UserControl1 : Window
    {
        public ObservableCollection<Hint> Hints;

        public UserControl1()
        {
            InitializeComponent();
            this.Hints = new ObservableCollection<Hint>();
            DataContext = Hints;
        }
    }
    public class Hint
    {
        public string Display { get; set; }
        public string Description { get; set; }
        public string GroupName { get; set; }

        public Hint(string display, string description, string groupName = "")
        {
            this.Display = display;
            this.Description = description;

            if (groupName == null)
                groupName = string.Empty;

            this.GroupName = groupName;
        }
    }

Wyświetla:
https://pasteboard.co/GRdt5xx.png

DisplayMemberPath="Display" w ListView nic działa jak powinno :<

0

Ten fragment kodu które wstawiłeś daje już dobry wynik, wstaw go do nowego projektu i zobaczysz że działa tak jak trzeba.
Więc problem jest gdzieś poza, jakiś customy templejt, albo literówka ....

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