Обновить список на флажках - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть list<Month> months, который содержит 12-месячные объекты со строкой имени, которая имеет название месяца (например, januari), и list<Month> selectedMonths, который я хотел бы добавить к месяцам, выбраннымпользователь с флажком, и удалите его, когда флажок снят.

В XAML у меня есть:

<StackPanel>
  <CheckBox IsChecked="{Binding monthCheck}" Content="Januari"/>
  <CheckBox IsChecked="{Binding monthCheck}" Content="Februari"/>
  [etc...]
  <CheckBox IsChecked="{Binding monthCheck}" Content="November"/>
  <CheckBox IsChecked="{Binding monthCheck}" Content="December"/>
</StackPanel>

Прямо сейчас в моей модели просмотра у меня есть:

private bool _monthCheck;
public bool monthCheck{
get{ return _monthCheck; }
set{
   _monthCheck = value;
   OnPropertyChanged("maandCheck");
   }

Прямо сейчас, если я нажму любой из флажков, все 12 из них будут изменены с одним нажатием (понятно, они все связаны с одним и тем же bool);Мне бы хотелось, чтобы, когда я ставил флажок, он проверял Content флажка и добавлял соответствующий месяц от months к selectedMonths.Как бы я это сделал?Могу ли я сделать это только с кодом в monthCheck сеттере?Что-то вроде:

set{
   _montcheck = value;
   if(value){
      somehow get Content
      select month with name = content from months
      selectedMonths.add(thatMonth)
      only check the appropriate box
   }

   if(!value){
      somehow get Content
      select month with that name
      selectedMonths.remove(thatMonth)
      only uncheck the appropriate box
   }
   OnPropertyChanged("maandCheck");
}

Не знаю, как мне это сделать.

1 Ответ

0 голосов
/ 07 декабря 2018

Ваша модель представления должна иметь коллекцию объектов Month, с которыми может связываться ItemsControl в вашем представлении:

<ItemsControl ItemsSource="{Binding Months}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <CheckBox Content="{Binding Name}" IsChecked="{Binding IsSelected}"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

Модель представления с методом, который возвращает выбранные месяцы:

public class Month
{
    public string Name { get; set; }
    public bool IsSelected { get; set; }
}

public class ViewModel
{
    public List<Month> Months { get; } = new List<Month>
    {
        new Month { Name="January" },
        new Month { Name="February" },
        new Month { Name="March" },
        new Month { Name="April" },
        new Month { Name="May" },
        new Month { Name="June" },
        new Month { Name="July" },
        new Month { Name="August" },
        new Month { Name="September" },
        new Month { Name="October" },
        new Month { Name="November" },
        new Month { Name="December" },
    };

    public IEnumerable<Month> SelectedMonths
    {
        get { return Months.Where(m => m.IsSelected); }
    }
}

В этом примере отсутствует механизм, который фактически уведомляет пользовательский интерфейс об изменениях набора выбранных месяцев, но из вопроса неясно, требуется ли это вообще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...