Допустим есть ListView, который ссылается на список экземпляров некоторого класса, как прописать для него событие (обязательно в .cs, который связан с соответствующим .xaml) таким образом, чтобы при клике на один из элементов, например в условный TextBox вставлялось значение какого либо поля выбранного экземпляра класса?
Да, просто делаете стандартный биндинг коллекции и текущего значения выбранного элемента.
Пример кода модели:
/// <summary>
/// Selected Language
/// </summary>
public Lang Language
{
get => new(App.Language);
set
{
if (value == null) { return; }
if (App.Language.Equals(value.Culture)) { return; }
App.Language = value.Culture;
RaisePropertyChanged(nameof(Language));
}
}
/// <summary>
/// Language values list
/// </summary>
public ObservableCollection<Lang> Languages
{
get => _Languages;
set
{
_Languages = value;
RaisePropertyChanged(nameof(Languages));
}
}
Исходник: https://github.com/VoidVolker/LockScreen/blob/mast...
Код - не идеал, написан в рамках "чтобы не было потом мучительно больно что-то менять" и большей частью составлен из обрезков некоторых других проектов и опыта их разработки.
VoidVolker, в общем так как Ваш код показался мне по сложности сопоставимым с ядерным реактором, пришлось немного похимичить, код новичковый, но в этом его плюс, другие люди такого же уровня как я, кто сюда зайдёт могут применить то же самое, а Вы, если будет настроение, быть может сказать о косяках как senior программист:
JustJoe_066 на самом деле ничего сверхсложного - просто куча маленьких и простых деталей. Пример тоже привел самый простой - просто не стал убирать реальный код. Так-то пример можно сократить до примерно следующего варианта:
public class Lang(CultureInfo culture)
{
public CultureInfo Culture { get; set; } = culture;
public string FullName { get; set; } = culture.EnglishName + " / " + culture.NativeName;
public override bool Equals(object obj)
{
if (obj is Lang lang)
{
return Culture.LCID == lang.Culture.LCID;
}
else if (obj is CultureInfo culture)
{
return Culture.LCID == culture.LCID;
}
return Culture.Equals(obj);
}
public override int GetHashCode()
{
return 213191193 + EqualityComparer<CultureInfo>.Default.GetHashCode(Culture);
}
public override string ToString()
{
return FullName;
}
}
private Lang _Language;
private ObservableCollection<Lang> _Languages;
public Lang Language
{
get => _Language;
set
{
if (value == null) { return; }
_Language = value;
RaisePropertyChanged(nameof(Language));
}
}
public ObservableCollection<Lang> Languages
{
get => _Languages;
set
{
_Languages = value;
RaisePropertyChanged(nameof(Languages));
}
}