Привязка WPF ComboBox из сложного элемента ItemSource должна была выбрать поле IsSelect для внутреннего элемента
using System.Windows;
using System.Windows.Controls;
namespace Dummy.ModelAndViewModel
{
using System.ComponentModel;
using System.Collections.Generic;
using System;
using System.Collections.ObjectModel;
public class Model
{
public class Choice : Question
{
private bool _IsSelect = false;
private string _ChoiceText;
public int ChoiceId { get; set; }
public String ChoiceText { get; set; }
public bool IsSelect
{
get
{
return _IsSelect;
}
set
{
_IsSelect = value;
base.OnPropertyChanged("IsSelect");
}
}
}
public class Question : INotifyPropertyChanged
{
public int SurveyId { get; set; }
public int QuestionId { get; set; }
public string QuestionText { get; set; }
public bool MustAnswer { get; set; }
public bool IsActive { get; set; }
public AnswerTypes AnswerType { get; set; }
public List<Choice> QuestionChoices { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
}
public class DummyViewModel
{
private ObservableCollection<Model.Question> _Questions = new
ObservableCollection<Model.Question>();
public DummyViewModel()
{
_Questions = FillQuestionForSurvey(1);
}
public ObservableCollection<Model.Question> FillQuestionForSurvey(int surveyId)
{
ObservableCollection<Model.Question> result = new ObservableCollection<Model.Question>();
int quesId = 0;
Model.Question qs = new Model.Question()
{
SurveyId = surveyId,
QuestionId = ++quesId,
QuestionText = "Select your Favorite Fruit in Combo",
MustAnswer = true,
IsActive = true,
AnswerType = AnswerTypes.SingleSelectFromCombo,
QuestionChoices = new List<Model.Choice>()
{ new Model.Choice() {ChoiceId = 1, QuestionId = quesId, ChoiceText = "Apple"},
new Model.Choice() {ChoiceId = 2, QuestionId = quesId, ChoiceText = "Orange" },
}
};
result.Add(qs);
return result;
}
}
}
namespace Dummy
{
using System.Windows;
using System.Windows.Controls;
using Dummy.ModelAndViewModel;
public enum AnswerTypes { SingleLineText = 1, MultiLineText = 2, SingleTextAsNumber = 3, SingleTextAsDateAndTime = 4, SingleSelectFromCombo = 5, MultiSelectAsCheckBox = 6, SingleSelectAsRadio = 8 };
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class wndDummy : Window
{
DummyViewModel VM = new DummyViewModel();
public wndDummy()
{
DataContext = VM;
InitializeComponent();
Style = (Style)FindResource(typeof(Window));
VirtualizingStackPanel.SetIsVirtualizing(lvQuestions, false);
VirtualizingStackPanel.SetVirtualizationMode(lvQuestions, VirtualizationMode.Standard);
}
}
}
Теперь проблема в том, когда я использую ItemSource of Choice Choice
<DataTemplate x:Key="SingleSelectCombo" >
<ComboBox Padding="5,0,20,0"
ItemsSource="{Binding QuestionChoices, Mode=TwoWay}"
DisplayMemberPath="ChoiceText" />
</DataTemplate>
Я хочу установить isSelect as True на выбранный текст, это минимум, который я хочу сделать, я пробовал различные методы со свойством multibind, setter, но ничего не работало для сценария со сложным элементом
Все остальные условия для Radio, CheckBox Я могу установить isSelectProperty с той же моделью и ViewModel, но не для комбо. Любая помощь будет высоко оценена. Работать с Radio button легко, я тоже уже пытался обойти это
<DataTemplate>
<RadioButton Name="RdoBtn" GroupName="{Binding QuestionId}"
Content ="{Binding ChoiceText}"
IsChecked="{Binding IsSelect,
Mode=TwoWay}"/>
</DataTemplate>