WPF: ListView & Editing ListViewItemC#

Место общения программистов C#
Ответить
Anonymous
 WPF: ListView & Editing ListViewItem

Сообщение Anonymous »

< /p>

Я хочу иметь возможность выбрать элемент, а затем редактировать его этикетку: < /p>














  • Элемент остается выделенным < /li>
    < /ul> < /li>
    . TextBlock < /li>
    Отредактированный элемент не выбран < /li>
    Нажженный элемент выбран и выделен < /li>
    < /ul> < /li>
    Любая другая область окна нажимается:


    Textbox сменена на TextBlock < />

    . Выделен < /li>
    < /ul> < /li>
    < /ol>

    Поведение должно быть в значительной степени, как в Windows Explorer. < /p>

    Мне удалось выполнить большинство требований. Тем не менее, я получаю случайные результаты. Например, при первом запуска я мог бы нажать прямо на метку, чтобы редактировать его. Сам предмет остается не выделенным. Это происходит только при запуске. Это позволяет редактировать несколько элементов одновременно.



















































    < /code>

    < /p>

    code < /p>

    public partial class DailyImages
    {
    public DailyImages()
    {
    InitializeComponent();

    ViewModel.DailyImages dailyImages = new ViewModel.DailyImages();
    _mediaItemList.DataContext = dailyImages;
    }

    private void OnClickLabelBlock(object sender, MouseButtonEventArgs e)
    {
    TextBlock notes = sender as TextBlock;
    if (notes == null) return;

    MediaItem selectedMedia = notes.DataContext as MediaItem;
    if (selectedMedia == null) return;

    // Multiple items might be selected
    // Clear all selected items
    _mediaItemList.SelectedItems.Clear();

    // Reselect
    selectedMedia.IsSelected = true;
    selectedMedia.IsEditing = true;

    Mouse.Capture(this, CaptureMode.SubTree);
    }

    private void OnTextLostFocus(object sender, RoutedEventArgs e)
    {
    TextBox textBox = sender as TextBox;
    if (textBox == null) return;

    MediaItem mediaItem = textBox.DataContext as MediaItem;
    if (mediaItem == null)
    return;

    // End the label editing
    mediaItem.IsEditing = false;

    ReleaseMouseCapture();
    }

    private void OnClickMediaList(object sender, MouseButtonEventArgs e)
    {
    // End the label editing
    foreach (MediaItem mediaItem in _mediaItemList.Items)
    mediaItem.IsEditing = false;

    ReleaseMouseCapture();
    }
    }
    < /code>

    mediaitem.cs

    public class MediaItem : INotifyPropertyChanged
    {
    private bool _isEditing;
    private bool _isSelected;
    private string _label;

    public MediaItem()
    {
    IsEditing = false;
    _isSelected = false;
    }

    public bool IsEditing
    {
    get { return _isEditing; }
    set
    {
    if (_isEditing == value) return;
    _isEditing = value;
    OnPropertyChanged("IsEditing");
    }
    }

    public string Label
    {
    get { return _label; }
    set
    {
    _label = value;
    OnPropertyChanged("Label");
    }
    }

    public DateTime Date { get; set; }
    public string IconPath { get; set; }

    public bool IsSelected
    {
    get { return _isSelected; }
    set
    {
    _isSelected = value;
    OnPropertyChanged("IsSelected");
    }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged(string propertyName)
    {
    PropertyChangedEventHandler handler = PropertyChanged;
    if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
    }
    < /code>

    dailyimages.cs

    public class DailyImages
    {
    private ObservableCollection _mediaItems;

    public DailyImages()
    {
    _mediaItems = new ObservableCollection();

    _mediaItems.Add(new MediaItem {Label = "Image 1", IconPath = "Resources/Icon1.png"});
    _mediaItems.Add(new MediaItem {Label = "Image 2", IconPath = "Resources/Icon2.png"});
    _mediaItems.Add(new MediaItem {Label = "Image 3", IconPath = "Resources/Icon3.png"});
    _mediaItems.Add(new MediaItem {Label = "Image 4", IconPath = "Resources/Icon4.png"});
    _mediaItems.Add(new MediaItem {Label = "Image 5", IconPath = "Resources/Icon5.jpg"});
    _mediaItems.Add(new MediaItem {Label = "Image 6", IconPath = "Resources/Icon6.png"});
    _mediaItems.Add(new MediaItem {Label = "Image 7", IconPath = "Resources/Icon7.png"});
    _mediaItems.Add(new MediaItem {Label = "Image 8", IconPath = "Resources/Icon8.png"});
    _mediaItems.Add(new MediaItem {Label = "Image 9", IconPath = "Resources/Icon9.png"});
    }

    public ObservableCollection MediaItems
    {
    get { return _mediaItems; }
    set { _mediaItems = value; }
    }
    }
    < /code>

    Спасибо за чтение длинного поста. Управление?>

    Подробнее здесь: https://stackoverflow.com/questions/145 ... stviewitem
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»