Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Interfaz IEditableCollectionViewAddNewItem

.NET Framework (current version)
 

Publicado: octubre de 2016

Define métodos y propiedades que un CollectionView implementa para poder especificar elementos de adición de un tipo específico.

Espacio de nombres:   System.ComponentModel
Ensamblado:  WindowsBase (en WindowsBase.dll)

public interface IEditableCollectionViewAddNewItem : IEditableCollectionView

NombreDescripción
System_CAPS_pubpropertyCanAddNew

Obtiene un valor que indica si puede agregarse un elemento nuevo a la colección.(Heredado de IEditableCollectionView).

System_CAPS_pubpropertyCanAddNewItem

Obtiene un valor que indica si un objeto especificado se puede agregar a la colección.

System_CAPS_pubpropertyCanCancelEdit

Obtiene un valor que indica si la vista de colección puede descartar los cambios pendientes y restaurar los valores originales de un objeto editado.(Heredado de IEditableCollectionView).

System_CAPS_pubpropertyCanRemove

Obtiene un valor que indica si un elemento puede quitarse de la colección.(Heredado de IEditableCollectionView).

System_CAPS_pubpropertyCurrentAddItem

Obtiene el elemento que se está agregando durante la transacción de adición actual.(Heredado de IEditableCollectionView).

System_CAPS_pubpropertyCurrentEditItem

Obtiene el elemento de la colección que se está editando.(Heredado de IEditableCollectionView).

System_CAPS_pubpropertyIsAddingNew

Obtiene un valor que indica si hay una transacción de adición en curso.(Heredado de IEditableCollectionView).

System_CAPS_pubpropertyIsEditingItem

Obtiene un valor que indica si hay una transacción de edición en curso.(Heredado de IEditableCollectionView).

System_CAPS_pubpropertyNewItemPlaceholderPosition

Obtiene o establece la posición del nuevo marcador de posición de elemento en la vista de colección.(Heredado de IEditableCollectionView).

NombreDescripción
System_CAPS_pubmethodAddNew()

Agrega un nuevo elemento a la colección.(Heredado de IEditableCollectionView).

System_CAPS_pubmethodAddNewItem(Object)

Agrega a la colección el objeto especificado.

System_CAPS_pubmethodCancelEdit()

Finaliza la transacción de edición y, si es posible, restaura el valor original del elemento.(Heredado de IEditableCollectionView).

System_CAPS_pubmethodCancelNew()

Finaliza la transacción de adición y descarta el nuevo elemento pendiente.(Heredado de IEditableCollectionView).

System_CAPS_pubmethodCommitEdit()

Finaliza la transacción de edición y guarda los cambios pendientes.(Heredado de IEditableCollectionView).

System_CAPS_pubmethodCommitNew()

Finaliza la transacción de adición y guarda el nuevo elemento pendiente.(Heredado de IEditableCollectionView).

System_CAPS_pubmethodEditItem(Object)

Inicia una transacción de edición del elemento especificado.(Heredado de IEditableCollectionView).

System_CAPS_pubmethodRemove(Object)

Quita el elemento especificado de la colección.(Heredado de IEditableCollectionView).

System_CAPS_pubmethodRemoveAt(Int32)

Quita de la colección un elemento situado en la posición especificada.(Heredado de IEditableCollectionView).

El IEditableCollectionViewAddNewItem interfaz permite que los desarrolladores de aplicaciones especificar qué tipo de objeto que se va a agregar a una colección. Esta interfaz extiende IEditableCollectionView, por lo que puede agregar, editar y eliminar elementos de una colección. IEditableCollectionViewAddNewItem Agrega el AddNewItem método, que toma un objeto que se agrega a la colección. Este método es útil cuando la colección y objetos que desea agregar tienen una o varias de las siguientes características:

  • Los objetos de la CollectionView son tipos diferentes.

  • Los objetos no tiene un constructor predeterminado.

  • El objeto ya existe.

  • Para agregar una null objeto a la colección.

En el ejemplo siguiente se habilita a un usuario agregar varios tipos de elementos a una colección. El usuario puede escribir un nuevo elemento y enviar la entrada o cancele la transacción. En el ejemplo se obtiene un IEditableCollectionViewAddNewItem desde el Items propiedad de un ListBox y crea un objeto, cuyo tipo viene determinado por el usuario. A continuación, el ejemplo llama el AddNewItem para agregar el objeto a la colección.

using System;
using System.ComponentModel;
using System.Windows;

namespace IEditableCollectionViewAddItemExample
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            IEditableCollectionViewAddNewItem viewToAddDisparateItems =
                catalogList.Items as IEditableCollectionViewAddNewItem;

            if (!viewToAddDisparateItems.CanAddNewItem)
            {
                MessageBox.Show("You cannot add items to the list.");
                return;
            }

            // Create a window that prompts the user to enter a new
            // item to sell.
            AddItemWindow win = new AddItemWindow();

            // Create an item, depending on which RadioButton is selected.
            // Radio buttons correspond to book, cd, dvd, or other.
            LibraryItem newItem;

            if ((bool)book.IsChecked)
            {
                newItem = new Book("Enter the book title", "Enter an Author", "Enter a Genre",
                    "Enter a call number", DateTime.Now + new TimeSpan(21, 0, 0, 0));
            }
            else if ((bool)cd.IsChecked)
            {
                newItem = new MusicCD("Enter the Album", "Enter the artist", 0, "CD.******",
                    DateTime.Now + new TimeSpan(14, 0, 0, 0));
            }

            else if ((bool)dvd.IsChecked)
            {
                newItem = new MovieDVD("Enter the movie title", "Enter the director",
                    "Enter the genre", new TimeSpan(), "DVD.******",
                    DateTime.Now + new TimeSpan(7, 0, 0, 0));
            }
            else
            {
                newItem = new LibraryItem("Enter the title", "Enter the call number",
                        DateTime.Now + new TimeSpan(14, 0, 0, 0));
            }

            // Add the new item to the collection by calling
            // IEditableCollectionViewAddNewItem.AddNewItem.
            // Set the DataContext of the AddItemWindow to the
            // returned item.
            win.DataContext = viewToAddDisparateItems.AddNewItem(newItem);

            // If the user submits the new item, commit the new
            // object to the collection.  If the user cancels 
            // adding the new item, discard the new item.
            if ((bool)win.ShowDialog())
            {
                viewToAddDisparateItems.CommitNew();
            }
            else
            {
                viewToAddDisparateItems.CancelNew();
            }


        }
    }
}

En el ejemplo siguiente se crea la interfaz de usuario para el ejemplo anterior.

<StackPanel xmlns:src="clr-namespace:IEditableCollectionViewAddItemExample">
  <StackPanel.Resources>
    <src:LibraryCatalog x:Key="catalog"/>

    <!--Use AlternationConverter to create alternating background brushes
              to better distinguish each item. See AlternationConverter
              for more information.-->
    <AlternationConverter x:Key="BackgroundConverter">
      <SolidColorBrush>LightBlue</SolidColorBrush>
      <SolidColorBrush>LightGray</SolidColorBrush>
    </AlternationConverter>

    <!--The DataTemplate for LibraryItem, which is the base class
              of the other data types.-->
    <DataTemplate DataType="{x:Type src:LibraryItem}">
      <StackPanel>

        <TextBlock FontWeight="Bold">Item:</TextBlock>
        <TextBlock Text="{Binding Title, StringFormat={}Title: {0}}"/>
        <TextBlock>
          <TextBlock.Text>
            <MultiBinding StringFormat="{}Due Date: {0:d}    Call Number: {1}">
              <Binding Path="DueDate"/>
              <Binding Path="CallNumber"/>
            </MultiBinding>
          </TextBlock.Text>
        </TextBlock>
      </StackPanel>
    </DataTemplate>

    <!--The DataTemplate for Book.-->
    <DataTemplate DataType="{x:Type src:Book}">
      <StackPanel>

        <TextBlock FontWeight="Bold">Book:</TextBlock>
        <TextBlock Text="{Binding Title, StringFormat={}Title: {0}}"/>
        <TextBlock>
          <TextBlock.Text>
            <MultiBinding StringFormat="{}Author: {0}    Genre: {1}">
              <Binding Path="Author"/>
              <Binding Path="Genre"/>
            </MultiBinding>
          </TextBlock.Text>
        </TextBlock>
        <TextBlock>
          <TextBlock.Text>
            <MultiBinding StringFormat="{}Due Date: {0:d}    Call Number: {1}">
              <Binding Path="DueDate"/>
              <Binding Path="CallNumber"/>
            </MultiBinding>
          </TextBlock.Text>
        </TextBlock>
      </StackPanel>
    </DataTemplate>

    <!--The DataTemplate for MusicCD.-->
    <DataTemplate DataType="{x:Type src:MusicCD}">
      <StackPanel>

        <TextBlock FontWeight="Bold">Music CD:</TextBlock>
        <TextBlock Text="{Binding Title, StringFormat={}Title: {0}}"/>
        <TextBlock>
          <TextBlock.Text>
            <MultiBinding StringFormat="{}Artist: {0}    Tracks: {1}">
              <Binding Path="Artist"/>
              <Binding Path="NumberOfTracks"/>
            </MultiBinding>
          </TextBlock.Text>
        </TextBlock>
        <TextBlock>
          <TextBlock.Text>
            <MultiBinding StringFormat="{}Due Date: {0:d}    Call Number: {1}">
              <Binding Path="DueDate"/>
              <Binding Path="CallNumber"/>
            </MultiBinding>
          </TextBlock.Text>
        </TextBlock>
      </StackPanel>
    </DataTemplate>

    <!--The DataTemplate for MovieDVD-->
    <DataTemplate DataType="{x:Type src:MovieDVD}">
      <StackPanel>
        <TextBlock FontWeight="Bold">Movie DVD:</TextBlock>
        <TextBlock Text="{Binding Title, StringFormat={}Title: {0}}"/>
        <TextBlock>
          <TextBlock.Text>
            <MultiBinding StringFormat="{}Director: {0}    Genre: {1}    Length: {2}">
              <Binding Path="Director"/>
              <Binding Path="Genre"/>
              <Binding Path="Length"/>
            </MultiBinding>
          </TextBlock.Text>
        </TextBlock>
        <TextBlock>
          <TextBlock.Text>
            <MultiBinding StringFormat="{}Due Date: {0:d}    Call Number: {1}">
              <Binding Path="DueDate"/>
              <Binding Path="CallNumber"/>
            </MultiBinding>
          </TextBlock.Text>
        </TextBlock>
      </StackPanel>
    </DataTemplate>

  </StackPanel.Resources>

  <!--Bind a ListBox to a collection of LibraryItem objects. The collection 
          can hold objects any type that inherits from LibraryItem.-->
  <ListBox Name="catalogList" Height="350" AlternationCount="2" 
               ItemsSource="{StaticResource catalog}">

    <!--Use alternating background styles to better distinguish each item.
              See ItemsControl.AlternationIndex for more information.-->
    <ListBox.ItemContainerStyle>
      <Style TargetType="ListBoxItem">
        <Setter Property="Background" 
                Value="{Binding RelativeSource={RelativeSource Self},
                Path=(ItemsControl.AlternationIndex),
               Converter={StaticResource BackgroundConverter}}"/>

        <Setter Property="Margin" Value="3"/>
      </Style>
    </ListBox.ItemContainerStyle>
  </ListBox>

  <!--Enable the user to choose a type of item to add to the collection.-->
  <TextBlock>Select an item to add:</TextBlock>
  <RadioButton Name="book" >Book</RadioButton>
  <RadioButton Name="cd">Music CD</RadioButton>
  <RadioButton Name="dvd">DVD</RadioButton>
  <RadioButton>Other</RadioButton>

  <Button Margin="0,3,0,0" Click="Button_Click">Add Item</Button>
</StackPanel>

En el ejemplo siguiente se crea el AddItemWindow en el que el usuario agrega datos para un nuevo elemento.

<StackPanel Margin="10" Width="250">
  <StackPanel.Resources>

    <!--Add an event handler to select all text when
        a TextBox gets focus.-->
    <Style TargetType="TextBox">
      <EventSetter Event="GotFocus" Handler="TextBoxFocus"/>
    </Style>

    <!--Create a Template for HeaderedContentControl so the header is
        to the left of the content.-->
    <Style TargetType="HeaderedContentControl">
      <Setter Property="Margin" Value="2"/>
      <Setter Property="Focusable" Value="False"/>
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="HeaderedContentControl">
            <DockPanel LastChildFill="False">
              <ContentPresenter ContentSource="Header" DockPanel.Dock="Left" 
                                Focusable="False" VerticalAlignment="Center"/>
              <ContentPresenter ContentSource="Content" Margin="5,0,0,0" 
                                DockPanel.Dock="Right" VerticalAlignment="Center"/>
            </DockPanel>

          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>

    <Style TargetType="Button">
      <Setter Property="Width" Value="100"/>
      <Setter Property="Margin" Value="10,15,15,15"/>

    </Style>

    <!--The DataTemplate that is used when the user 
        enters a new LibraryItem.-->
    <DataTemplate DataType="{x:Type src:LibraryItem}">
      <StackPanel>
        <HeaderedContentControl Header="Title">
          <TextBox Width="150" Text="{Binding Path=Title, Mode=TwoWay}"/>
        </HeaderedContentControl>
        <HeaderedContentControl Header="Due Date">
          <TextBox Width="150" Text="{Binding Path=DueDate, StringFormat=d, Mode=TwoWay}">

          </TextBox>
        </HeaderedContentControl>
        <HeaderedContentControl Header="Call Number">
          <TextBox Width="150" Text="{Binding Path=CallNumber, Mode=TwoWay}"/>
        </HeaderedContentControl>
      </StackPanel>
    </DataTemplate>

    <!--The DataTemplate that is used when the user 
        enters a new Book.-->
    <DataTemplate DataType="{x:Type src:Book}">
      <StackPanel>
        <HeaderedContentControl Header="Title">
          <TextBox Width="150" Text="{Binding Path=Title, Mode=TwoWay}"/>
        </HeaderedContentControl>
        <HeaderedContentControl Header="Author">
          <TextBox Width="150" Text="{Binding Path=Author, Mode=TwoWay}"/>
        </HeaderedContentControl>
        <HeaderedContentControl Header="Genre">
          <TextBox Width="150" Text="{Binding Path=Genre, Mode=TwoWay}"/>
        </HeaderedContentControl>
        <HeaderedContentControl Header="Due Date">
          <TextBox Width="150" Text="{Binding Path=DueDate, StringFormat=d, Mode=TwoWay}"/>
        </HeaderedContentControl>
        <HeaderedContentControl Header="Call Number">
          <TextBox Width="150" Text="{Binding Path=CallNumber, Mode=TwoWay}"/>
        </HeaderedContentControl>
      </StackPanel>
    </DataTemplate>

    <!--The DataTemplate that is used when the user 
        enters a new MusicCD.-->
    <DataTemplate DataType="{x:Type src:MusicCD}">
      <StackPanel>
        <HeaderedContentControl Header="Title">
          <TextBox Width="150" Text="{Binding Path=Title, Mode=TwoWay}"/>
        </HeaderedContentControl>
        <HeaderedContentControl Header="Artist">
          <TextBox Width="150" Text="{Binding Path=Artist, Mode=TwoWay}"/>
        </HeaderedContentControl>
        <HeaderedContentControl Header="Tracks">
          <TextBox Width="150" Text="{Binding Path=NumberOfTracks, Mode=TwoWay}"/>
        </HeaderedContentControl>
        <HeaderedContentControl Header="Due Date">
          <TextBox Width="150" Text="{Binding Path=DueDate, StringFormat=d, Mode=TwoWay}"/>
        </HeaderedContentControl>
        <HeaderedContentControl Header="Call Number">
          <TextBox Width="150" Text="{Binding Path=CallNumber, Mode=TwoWay}"/>
        </HeaderedContentControl>
      </StackPanel>
    </DataTemplate>

    <!--The DataTemplate that is used when the user 
        enters a new MovieDVD.-->
    <DataTemplate DataType="{x:Type src:MovieDVD}">
      <StackPanel>
        <HeaderedContentControl Header="Title">
          <TextBox Width="150" Text="{Binding Path=Title, Mode=TwoWay}"/>
        </HeaderedContentControl>
        <HeaderedContentControl Header="Director">
          <TextBox Width="150" Text="{Binding Path=Director, Mode=TwoWay}"/>
        </HeaderedContentControl>
        <HeaderedContentControl Header="Length">
          <TextBox Width="150" Text="{Binding Path=Length, Mode=TwoWay}"/>
        </HeaderedContentControl>
        <HeaderedContentControl Header="Genre">
          <TextBox Width="150" Text="{Binding Path=Genre, Mode=TwoWay}"/>
        </HeaderedContentControl>
        <HeaderedContentControl Header="Due Date">
          <TextBox Width="150" Text="{Binding Path=DueDate, StringFormat=d, Mode=TwoWay}"/>
        </HeaderedContentControl>
        <HeaderedContentControl Header="Call Number">
          <TextBox Width="150" Text="{Binding Path=CallNumber, Mode=TwoWay}"/>
        </HeaderedContentControl>
      </StackPanel>
    </DataTemplate>
  </StackPanel.Resources>

  <!--One of the DataTemplates that defined above 
      is used by this ContentControl when the window is created.-->
  <ContentControl Content="{Binding}" />

  <StackPanel Orientation="Horizontal">
    <Button IsDefault="True" Click="Submit_Click">_Submit</Button>
    <Button IsCancel="True">_Cancel</Button>
  </StackPanel>
</StackPanel>

En el ejemplo siguiente se muestra la lógica para el AddItemWindow.

using System.Windows;
using System.Windows.Controls;

namespace IEditableCollectionViewAddItemExample
{
    public partial class AddItemWindow : Window
    {
        public AddItemWindow()
        {
            InitializeComponent();
        }

        private void Submit_Click(object sender, RoutedEventArgs e)
        {
            DialogResult = true;
            Close();
        }

        // Select all text when the TextBox gets focus.
        private void TextBoxFocus(object sender, RoutedEventArgs e)
        {
            TextBox tbx = sender as TextBox;

            tbx.SelectAll();

        }
    }
}

El ejemplo siguiente muestra los tipos de datos y la colección que se utiliza en los ejemplos anteriores.

using System;
using System.Collections.ObjectModel;
using System.ComponentModel;

namespace IEditableCollectionViewAddItemExample
{
    // LibraryItem implements INotifyPropertyChanged so that the 
    // application is notified when a property changes.  It 
    // implements IEditableObject so that pending changes can be discarded.
    public class LibraryItem : INotifyPropertyChanged, IEditableObject
    {
        struct ItemData
        {
            internal string Title;
            internal string CallNumber;
            internal DateTime DueDate;
        }

        ItemData copyData;
        ItemData currentData;

        public LibraryItem(string title, string callNum, DateTime dueDate)
        {
            Title = title;
            CallNumber = callNum;
            DueDate = dueDate;
        }

        public override string ToString()
        {
            return String.Format("{0}, {1:c}, {2:D}", Title, CallNumber, DueDate);
        }

        public string Title
        {
            get { return currentData.Title; }
            set
            {
                if (currentData.Title != value)
                {
                    currentData.Title = value;
                    NotifyPropertyChanged("Title");
                }
            }
        }

        public string CallNumber
        {
            get { return currentData.CallNumber; }
            set
            {
                if (currentData.CallNumber != value)
                {
                    currentData.CallNumber = value;
                    NotifyPropertyChanged("CallNumber");
                }
            }
        }

        public DateTime DueDate
        {
            get { return currentData.DueDate; }
            set
            {
                if (value != currentData.DueDate)
                {
                    currentData.DueDate = value;
                    NotifyPropertyChanged("DueDate");
                }
            }
        }

        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        protected void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }

        #endregion

        #region IEditableObject Members

        public virtual void BeginEdit()
        {
            copyData = currentData;
        }

        public virtual void CancelEdit()
        {
            currentData = copyData;
            NotifyPropertyChanged("");

        }

        public virtual void EndEdit()
        {
            copyData = new ItemData();

        }

        #endregion

    }


    public class MusicCD : LibraryItem
    {
        private struct MusicData
        {
            internal int SongNumber;
            internal string Artist;

        }

        MusicData copyData;
        MusicData currentData;

        public MusicCD(string title, string artist, int songNum, string callNum, DateTime dueDate)
            : base(title, callNum, dueDate)
        {
            currentData.SongNumber = songNum;
            currentData.Artist = artist;
        }

        public string Artist
        {
            get { return currentData.Artist; }
            set
            {
                if (value != currentData.Artist)
                {
                    currentData.Artist = value;
                    NotifyPropertyChanged("Artist");
                }
            }
        }

        public int NumberOfTracks
        {
            get { return currentData.SongNumber; }
            set
            {
                if (value != currentData.SongNumber)
                {
                    currentData.SongNumber = value;
                    NotifyPropertyChanged("NumberOfTracks");
                }
            }
        }

        public override void BeginEdit()
        {
            base.BeginEdit();
            copyData = currentData;
        }

        public override void CancelEdit()
        {
            base.CancelEdit();
            currentData = copyData;
        }

        public override void EndEdit()
        {
            base.EndEdit();
            copyData = new MusicData();
        }

        public override string ToString()
        {
            return string.Format(
                "Album: {0}\nArtist: {1}\nTracks: {2}\nDue Date: {3:d}\nCall Number: {4}",
                this.Title, this.Artist, this.NumberOfTracks, this.DueDate, this.CallNumber);
        }
    }

    public class Book : LibraryItem
    {
        private struct BookData
        {
            internal string Author;
            internal string Genre;
        }

        BookData currentData;
        BookData copyData;

        public Book(string title, string author, string genre, string callnum, DateTime dueDate)
            : base (title, callnum, dueDate)
        {
            this.Author = author;
            this.Genre = genre;
        }

        public string Author
        {
            get { return currentData.Author; }
            set
            {
                if (value != currentData.Author)
                {
                    currentData.Author = value;
                    NotifyPropertyChanged("Author");
                }
            }
        }

        public string Genre
        {
            get { return currentData.Genre; }
            set
            {
                if (value != currentData.Genre)
                {
                    currentData.Genre = value;
                    NotifyPropertyChanged("Genre");
                }
            }
        }

        public override void BeginEdit()
        {
            base.BeginEdit();
            copyData = currentData;
        }

        public override void CancelEdit()
        {
            base.CancelEdit();
            currentData = copyData;
        }

        public override void EndEdit()
        {
            base.EndEdit();
            copyData = new BookData();
        }

        public override string ToString()
        {
            return String.Format(
                "Title: {0}\nAuthor: {1}\nGenre: {2}\nDue Date: {3:d}\nCall Number: {4}",
                this.Title, this.Author, this.Genre, this.DueDate, this.CallNumber);
        }
    }

    public class MovieDVD : LibraryItem
    {
        private struct MovieData
        {
            internal TimeSpan Length;
            internal string Director;
            internal string Genre;
        }

        private MovieData currentData;
        private MovieData copyData;


        public MovieDVD(string title, string director, string genre, TimeSpan length, string callnum, DateTime dueDate)
            : base(title, callnum, dueDate)
        {
            this.Director = director;
            this.Length = length;
            this.Genre = genre;
        }

        public TimeSpan Length
        {
            get { return currentData.Length; }
            set
            {
                if (value != currentData.Length)
                {
                    currentData.Length = value;
                    NotifyPropertyChanged("Length");
                }
            }
        }

        public string Director
        {
            get { return currentData.Director; }
            set
            {
                if (value != currentData.Director)
                {
                    currentData.Director = value;
                    NotifyPropertyChanged("Director");
                }
            }
        }

        public string Genre
        {
            get { return currentData.Genre; }
            set
            {
                if (value != currentData.Genre)
                {
                    currentData.Genre = value;
                    NotifyPropertyChanged("Genre");
                }
            }
        }

        public override void BeginEdit()
        {
            base.BeginEdit();
            copyData = currentData;
        }

        public override void CancelEdit()
        {
            base.CancelEdit();
            currentData = copyData;
        }

        public override void EndEdit()
        {
            base.EndEdit();
            copyData = new MovieData();
        }

        public override string  ToString()
        {
            return String.Format("Title: {0}\nDirector: {1}\nGenre: {2}\nLength: {3}\nDue Date: {4:d}\nCall Number: {5}",
                this.Title, this.Director, this.Genre, this.Length, this.DueDate, this.CallNumber);
        }
    }

    public class LibraryCatalog : ObservableCollection<LibraryItem>
    {
        public LibraryCatalog()
        {
            Add(new MusicCD("A Programmers Plight", "Jon Orton", 
                12, "CD.OrtPro", new DateTime(2010, 3, 24)));

            Add(new Book("Cooking with Thyme", "Eliot J. Graff",
                "Home Economics", "HE.GraThy", new DateTime(2010, 2, 26)));

            Add(new MovieDVD("Terror of the Testers", "Molly Dempsey", 
                "Horror", new TimeSpan(1, 27, 19), "DVD.DemTer",
                new DateTime(2010, 2, 1)));

            Add(new MusicCD("The Best of Jim Hance", "Jim Hance", 
                15, "CD.HanBes", new DateTime(2010, 1, 31)));

            Add(new Book("Victor and the VB Vehicle", "Tommy Hortono", 
                "YA Fiction", "YA.HorVic", new DateTime(2010, 3, 1)));

        }
    }
}

.NET Framework
Disponible desde 4.0
Volver al principio
Mostrar: