Насколько я понимаю, состояния, которые вы должны предоставить, представляют собой динамический неизменяемый список параметров, в которых вы хотите предложить пользователю включить / отключить каждый из них, а затем вернуть результат в виде исходной строки.
Если список представляет собой статический список, который вы ожидаете, например, состояния, я бы, конечно, предложил вам иметь список состояний и сопоставлять его.
Создайте класс Tag, который реализует INotifyPropertyChanged, который имеет два реквизита (имя выбрано) и не забудьте поднять PropertyChanged
для каждого изменения свойства (я вижу, это исключено из вашего кода, я полагаю, для краткости).
Создайте подкласс List, добавьте строковый конструктор и переопределите ToString (), выполните весь анализ в этом классе и верните результат в ToString, а затем вызовите его из вашей ViewModel.
Теперь я понимаю, что вы пометили вопрос с помощью , так почему вы хотите связать эту строку с запятой?
Возможно, вы захотите выставить опции на сервере и рассматривать их так, чтобы клиент не знал, что это разделитель запятой.
public class OptionsViewModel : ViewModelBase
{
public OptionsViewModel()
{
IsBusy = True;
var context = new MyDomainContext();
_Tags = context.Tags;
//if called elsewhere but from ctor, make sure context.IsLoading is false;
//The Load method is throwing an exception if re-loading when a load is on.
//Debug.Assert(!context.IsLoading);
context.Load(
context.GetTagsQuery(),
(op) =>
{
if(op.HasError && !op.IsErrorHandled) op.MarkErrorAsHandlere();
IsBusy = false;
},
null);
}
private readonly Ienumerable<Tag> _Tags;
public Ienumerable<Tag> Tags
{
get
{
return _Tags;
}
}
}
На сервере выставьте операцию, которая возвращает этот datacontract (из Tag) и сервер должен выполнить разбор запятой.