Добавить элементы в ListView в WPF (пользовательский элемент) - PullRequest
0 голосов
/ 28 апреля 2018

Я новичок в WPF, только учусь. Как я могу добавить элементы в просмотр списка, чтобы сохранить построенный стиль?

Я хочу добавить элементы в этом стиле.

XAMLCode:

 <ListView x:Name="listv_Main" Width="740" Height="400">
            <ListViewItem>
                <Grid x:Name="Grid_Main_series" Height="70" Width="723" Background="#FF0299D1">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*" />
                    </Grid.RowDefinitions>

                    <StackPanel Margin="10 0 0 0" Orientation="Horizontal" VerticalAlignment="Center">
                        <Image Width="74" Height="68" Stretch="Uniform"  HorizontalAlignment="Left" Source="https://myanimelist.cdn-dena.com/images/anime/2/75259.jpg"/>
                        <Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" Width="2" Height="50" Background="#FF93999B" />

                        <StackPanel Orientation="Vertical">
                            <TextBlock Height="20" Margin="0 10 0 5" FontFamily="Arial" FontSize="11" Foreground="AntiqueWhite"><Run Text="Full Metal Panic!"/></TextBlock>
                            <TextBlock Height="20" Margin="0 5 0 4" FontFamily="Arial" FontSize="11" Foreground="AntiqueWhite"><Run Text="Full Metal Panic!"/></TextBlock>
                        </StackPanel>

                        <Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" Width="2" Height="50" Background="#FF93999B" />

                        <StackPanel x:Name="stack_Main_series" Height="70" Width="530" VerticalAlignment="Top" HorizontalAlignment="Right">
                            <TextBlock Margin="0 5 10 0" Text="Episodes: 24/12" FontWeight="Thin" HorizontalAlignment="Right" Foreground="AntiqueWhite"/>
                            <TextBlock Margin="0 5 10 0" Text="Finished Airing" FontWeight="Thin" HorizontalAlignment="Right" Foreground="AntiqueWhite"/>
                        </StackPanel>

                    </StackPanel>
                </Grid>
            </ListViewItem>
        </ListView>

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Вот очень простой пример, который вы можете расширить для своих целей. Пожалуйста, дайте мне знать, если у вас возникли проблемы с пониманием чего-либо.

MainWindow.xaml

<Window x:Class="WpfApp5.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:WpfApp5"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<Grid>
  <ListView Width="740" Height="400" ItemsSource="{Binding MyListItems}">
    <ListView.View>
      <GridView>
        <GridViewColumn DisplayMemberBinding="{Binding Path=Title}"
                        Header="Title" />
        <GridViewColumn DisplayMemberBinding="{Binding Path=Description}"
                        Header="Description" />
        <GridViewColumn DisplayMemberBinding="{Binding Path=ReleaseDate}"
                        Header="Release" />

      </GridView>

    </ListView.View>
  </ListView>
</Grid>

MainWindow.cs

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new MyClass();
    }
}

ViewModel

public class MyClass : INotifyPropertyChanged
{
    private ObservableCollection<MyListItem> _myListItems;

    public ObservableCollection<MyListItem> MyListItems
    {
        get => _myListItems;
        set
        {
            _myListItems = value;
            OnPropertyChanged(nameof(MyListItems));
        }
    }

    public MyClass()
    {
        MyListItems = new ObservableCollection<MyListItem>();

        MyListItems.Add( new MyListItem()
                         {
                             Title = "Title1",
                             Description = "This is description nr1",
                             ReleaseDate = DateTime.Now
                         } );
        MyListItems.Add( new MyListItem()
                         {
                             Title = "Title2",
                             Description = "This is description nr2",
                             ReleaseDate = DateTime.Now
                         } );
        MyListItems.Add( new MyListItem()
                         {
                             Title = "Title3",
                             Description = "This is description nr3",
                             ReleaseDate = DateTime.Now
                         } );
    }



    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged( [CallerMemberName] string propertyName = null )
    {
        PropertyChanged?.Invoke( this, new PropertyChangedEventArgs( propertyName ) );
    }

И класс, который представляет одну запись в вашем списке:

public class MyListItem : INotifyPropertyChanged
{
    private string _title;

    public string Title
    {
        get => _title;
        set
        {
            _title = value;
            OnPropertyChanged( nameof( Title ) );
        }
    }

    private string _description;
    public string Description
    {
        get => _description;
        set
        {
            _description = value;
            OnPropertyChanged( nameof( Description ) );
        }
    }

    private DateTime _releaseDate;
    public DateTime ReleaseDate
    {
        get => _releaseDate;
        set
        {
            _releaseDate = value;
            OnPropertyChanged(nameof(ReleaseDate));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged( [CallerMemberName] string propertyName = null )
    {
        PropertyChanged?.Invoke( this, new PropertyChangedEventArgs( propertyName ) );
    }
}

Если вы ищете в Google «MVVM» и «Wpf Databinding», вы найдете множество учебных пособий и примеров.

0 голосов
/ 28 апреля 2018

Использование itemtemplate - короткий ответ. И вы также можете использовать список, так как это не вещи в столбцах.

Взгляните на это:

https://social.technet.microsoft.com/wiki/contents/articles/32164.wpf-mvvm-step-by-step-2.aspx

Это использует наблюдаемую коллекцию. Если вы хотите иметь несколько свойств для своих текстовых блоков, вам нужен более сложный класс с несколькими открытыми свойствами, а не просто строка. Вы бы привязали свойства Text ваших текстовых блоков к каждому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...