Пользовательский UserControl внутри ItemsControl.DataTemplateC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Пользовательский UserControl внутри ItemsControl.DataTemplate

Сообщение Anonymous »

У меня следующее окно: И код программной части:

Код: Выделить всё

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
Моя модель представления:

Код: Выделить всё

public class MainViewModel : INotifyPropertyChanged
{
public ObservableCollection Values { get; set; }
public List Items => GetItems();
public ICommand AddCommand { get; private set; }
public ICommand DeleteCommand { get; private set; }

public MainViewModel()
{
Values = new ObservableCollection();
AddCommand = new RelayCommand(AddComboBox);
DeleteCommand = new RelayCommand(DeleteComboBox);
}

private void AddComboBox()
{
Values.Add(new DataEntry(MyEnum.None));
}

private void DeleteComboBox(DataEntry entry)
{
if (Values.Contains(entry))
{
Values.Remove(entry);
}
}

private List GetItems()
{
return Enum.GetValues().ToList();
}

public event PropertyChangedEventHandler PropertyChanged;
}
А это код для DataEntry и MyEnum:

Код: Выделить всё

public enum MyEnum
{
First,
Second,
Third,
None
}

public class DataEntry
{
public MyEnum Data { get; set; }

public DataEntry(MyEnum data)
{
Data = data;
}
}
Это работает по назначению: я могу добавлять и удалять поля со списком с помощью кнопок, а изменения в выбранных элементах полей со списком будут отражены в коллекции «Значения». Теперь я хочу переместить содержимое ItemsSource DataTemplate в отдельный UserControl (в основном в целях обучения).
Я определил его следующим образом : Код:

Код: Выделить всё

public partial class MyControl : UserControl
{
public MyControl()
{
InitializeComponent();
}

public static readonly DependencyProperty SelectedItemProperty =
DependencyProperty.Register(
nameof(SelectedItem),
typeof(object),
typeof(MyControl),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

public object SelectedItem
{
get => GetValue(SelectedItemProperty);
set => SetValue(SelectedItemProperty, value);
}
}
И изменил DataTemplate на: Он работает для добавления полей со списком и изменения выбранных в них элементов. Но удаление вызывает исключение:

Код: Выделить всё

Unable to cast object of type 'WpfApp1.MyEnum' to type 'WpfApp1.DataEntry'
Это имеет смысл, поскольку я передаю свойство Data объекта DataEntry в свой элемент управления, поэтому он ничего не знает о DataEntry
code> где эти данные хранятся и поэтому не могут быть переданы в качестве параметра команды.
Я пытался изменить свою привязку на: Итак, насколько я понимаю, сейчас я привязываю объект типа DataEntry к свойству SelectedItem. Однако при удалении элементов по-прежнему возникает исключение. Кроме того, в этом случае при изменении выбранных элементов в полях со списком больше не будет обновляться коллекция Values.
Итак, вопрос в следующем: как правильно настроить привязку для моего пользовательского элемента управления, чтобы сохранить первоначальную функциональность?

Подробнее здесь: https://stackoverflow.com/questions/791 ... tatemplate
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как установить фокус на текстовое поле, которое находится под ItemsControl и Datatemplate Grid
    Anonymous » » в форуме C#
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Позвоните в WebMethod в USerControl.cs из usercontrol.ascx javascript
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Как правильно привязать ObservableCollection внутри ObservableCollection к ItemsControl (WPF)
    Гость » » в форуме C#
    0 Ответы
    43 Просмотры
    Последнее сообщение Гость
  • Обновление до .NET 4.5: ItemsControl не соответствует источнику элементов.
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Как связать видимость строки ItemsControl [дубликат]
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

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