XAML Привязка свойства объекта из коллекции с использованием статического ключа перечисленияC#

Место общения программистов C#
Ответить
Anonymous
 XAML Привязка свойства объекта из коллекции с использованием статического ключа перечисления

Сообщение Anonymous »

Я продолжаю обсуждать эту проблему с GitHub Copilot, и у меня почти такой же опыт работы с Gemini и ChatGPT, все они дают мне то же самое, что я уже пробовал, и хожу по кругу с предложениями, которые по большей части просто не работает.
В C#/WPF у меня есть перечисление, объект, содержащий ключ из перечисления и связанное с ним значение, а также KeyedCollection этих объектов. например

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

public enum MyEnum
{
Key1,
Key2,
Key3
}

public class MyObject : ObservableObjectBase
{
public MyEnum Key { get; set; }
public string Value { get; set; }  // Actual implementation generates change event
}

public class MyCollection : KeyedCollection
{
protected override MyEnum GetKeyForItem(MyObject item)
{
return item.Key;
}
}
Мне нужно привязать текст текстового поля (или любого компонента) к someCollection[key].Value, используя статическое значение из перечисления. SomeCollection будет свойством окна, содержащего элемент управления, поэтому он доступен из DataContext. Кажется, это ДОЛЖНО быть так же просто, как и это один из подходов, предлагаемых каждым ИИ, но он выдает сообщение «Нет контекста данных для привязки» в VS IDE, и, конечно, привязка не работает. SomeCollection видима из контекста и работает для других компонентов, которые обращаются к ней (например, ниже), как и ключ перечисления, который я хочу использовать. Здесь следует отметить, что код перечисления и MyCollection/MyObject находится в отдельной библиотеке классов, но это не имеет значения. И опять же, я могу получить доступ к тем же самым частям из конвертера XAML ниже.
Если я использую конвертер для извлечения объекта (как обычно предлагают ИИ), я не знаю как затем привязать элемент управления к object.Value, а не просто к объекту. ИИ будет продолжать предлагать это, но это не сработает, просто вернув MyObject из конвертера.
Мне удалось использовать конвертер, который просто возвращает значение и получает/устанавливает значение в указанный объект внутри функций Convert/ConvertBack. Однако в этом сценарии я теряю измененные события объекта, предположительно потому, что элемент управления не привязан непосредственно к объекту. Я не хочу, чтобы коллекция распространяла измененное событие, потому что это будет обновлять каждое отдельное значение при каждом его обновлении.
Я также пробовал подходы MultiBinding, предложенные AI, и вложенные привязки, которые никогда не работа. Кажется, что можно сделать какую-то вложенную привязку с помощью конвертера объектов, которая будет выглядеть примерно так: Спасибо за любые предложения. Кажется, что это должно быть очень легко и обычно, но это все больше и больше похоже на одно из многих: «Отсюда туда не добраться!» элементы, с которыми я сталкиваюсь в C# и WPF.
Спасибо,
Бео

Подробнее здесь: https://stackoverflow.com/questions/793 ... ic-enum-ke
Ответить

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

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

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

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

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