podział listBox.Datasource

0

Czy da się jakoś podzielić w Listbox żeby najpierw część danych się wyświetlało np na czerwono a później kolejna część na czarno, kolorami wiem jak zarządzać teraz pytanie jak mam podzielić elementy w Datasource?

InitializeComponent();
            SetupData();

            ListToDo Test = new ListToDo("Testowy napis");
            test.Add(Test);
            mainListBinding.DataSource = test;
            listBox.DataSource = mainListBinding;

            
            mainListBinding.DataSource = mainList; //w sensie tutaj żeby dospiać do tego co już dodałem
            
            listBox.DataSource = mainListBinding;
1

Da się. Robisz w xamlu DataTemplate dla tej kontrolki:

<ListBox Width="400" Margin="10"
         ItemsSource="{Binding Source={StaticResource myTodoList}}">
   <ListBox.ItemTemplate>
     <DataTemplate>
       <StackPanel>
         <TextBlock Text="{Binding Path=TaskName}" />
         <TextBlock Text="{Binding Path=Description}"/>
         <TextBlock Text="{Binding Path=Priority}"/>
       </StackPanel>
     </DataTemplate>
   </ListBox.ItemTemplate>
 </ListBox>

Teraz możesz sobie ostylować te textblocki :)

A tutaj reszta:
https://docs.microsoft.com/pl-pl/dotnet/framework/wpf/data/data-templating-overview

1

Po co tak drastycznie bawić się w DataTemplate. Lepiej zrobić konwerter który będzie edytował rowbackroundcolor w stylach

0
Grzegorz Świdwa napisał(a):

Po co tak drastycznie bawić się w DataTemplate. Lepiej zrobić konwerter który będzie edytował rowbackroundcolor w stylach

mógłbyś coś więcej objaśnić?

1

screenshot-20200304201436.png

public class Person : INotifyPropertyChanged
    {
        #region PropertyChanged
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged(string PropertyName)
        {
            this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
        }
        #endregion
        public Person(string Name, Brush Backround)
        {
            this.Name = Name;
            this.Backround = Backround;
        }

        private string name;
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
                OnPropertyChanged("Name");
            }
        }

        private Brush backround;
        public Brush Backround
        {
            get
            {
                return backround;
            }
            set
            {
                backround = value;
                OnPropertyChanged("Backround");
            }
        }

        public override string ToString()
        {
            return Name;
        }
    }
    class MainWindowViewModel : INotifyPropertyChanged
    {
        #region PropertyChanged
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged(string PropertyName)
        {
            this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
        }
        #endregion
        public MainWindowViewModel()
        {

        }

        /// <summary>
        /// Kolekcja wszystkich dostępnych osób
        /// </summary>
        public IList<Person> People { get; private set; } = new ObservableCollection<Person>();
        
    }
<Window x:Class="Aplikacja.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:Aplikacja"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <Style TargetType="{x:Type ListBoxItem}">
            <Style.Setters>
                <Setter Property="Background" Value="{Binding Path=Backround}"/>
            </Style.Setters>
        </Style>
    </Window.Resources>
    <Grid>
        <Grid.DataContext>
            <local:MainWindowViewModel x:Name="hViewModel"/>
        </Grid.DataContext>
        <ListBox ItemsSource="{Binding Path=People}">
            
        </ListBox>
    </Grid>
</Window>
0
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows.Media;

public class Person : INotifyPropertyChanged
{
    #region PropertyChanged
    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged(string PropertyName)
    {
        this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
    }
    #endregion
    public Person(string Name, Brush Backround)
    {
        this.Name = Name;
        this.Backround = Backround;
    }

    private string name;
    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
            OnPropertyChanged("Name");
        }
    }

    private Brush backround;
    public Brush Backround
    {
        get
        {
            return backround;
        }
        set
        {
            backround = value;
            OnPropertyChanged("Backround");
        }
    }

    public override string ToString()
    {
        return Name;
    }
}
class MainWindowViewModel : INotifyPropertyChanged
{
    #region PropertyChanged
    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged(string PropertyName)
    {
        this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
    }
    #endregion
    public MainWindowViewModel()
    {

    }

    /// <summary>
    /// Kolekcja wszystkich dostępnych osób
    /// </summary>
    public IList<Person> People { get; private set; } = new ObservableCollection<Person>();

}
<Window x:Class="Aplikacja.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:Aplikacja"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <Style TargetType="{x:Type ListBoxItem}">
            <Style.Setters>
                <Setter Property="Background" Value="{Binding Path=Backround}"/>
            </Style.Setters>
        </Style>
    </Window.Resources>
    <Grid>
        <Grid.DataContext>
            <local:MainWindowViewModel x:Name="hViewModel"/>
        </Grid.DataContext>
        <ListBox ItemsSource="{Binding Path=People}">

        </ListBox>
    </Grid>
</Window>
1

Klasa person i MainWindowViewModel musza znajdować się w jakiejś przestrzeni nazw

Przykład:
using ...
using ...

namespace...
{
wypociny
}

Zrób tak, aby Twój MainWindowViewModel znajdował się w tej samej przestrzeni co MainWindow

0

A jakiś pomysł jak to zrobić w windows form app?

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