Добрый день!
Вопрос: почему не происходит изменение данных во ViewModel при действиях на форме?
Есть модель:
public class Checklist: ViewModel.BaseViewModel<br>
{<br>
public string Name { get; set; }<br>
public bool IsSelected { get; set; }<br>
}
Есть ViewModel:
public class ColumsViewModel:BaseViewModel
{
ObservableCollection<Models.Checklist> listc = new ObservableCollection<Models.Checklist>();
public ObservableCollection<Models.Checklist> Listc
{
get { return listc; }
set { listc = value;
OnPropertyChanged("IsSelected");
}
}
public ColumsViewModel(ObservableCollection<DataGridColumn> col)
{
foreach (DataGridColumn d in col)
{
if (d.Header != null)
{
if (d.Visibility == Visibility.Visible)
{
Listc.Add( new Models.Checklist { IsSelected = true, Name = d.Header.ToString() });
}
else
{
Listc.Add(new Models.Checklist { IsSelected = false, Name = d.Header.ToString() });
}
}
}
}
}
Форма:
<Window x:Class="WpfApp5.SetColums"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp5"
mc:Ignorable="d"
Title="SetColums" Height="300" Width="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="0.1*"/>
</Grid.RowDefinitions>
<ListBox x:Name="ch" ItemsSource="{Binding Listc}" >
<ListBox.ItemTemplate>
<HierarchicalDataTemplate>
<CheckBox Content="{Binding Name}" IsChecked="{Binding IsSelected, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
</HierarchicalDataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Right" >
<Button Content="Применить" Width="70" Height="20" Margin="0,0,10,0" IsDefault="True" Click="Button_Click"/>
<Button Content="Отмена" Width="70" Height="20" Margin="0,2,0,3" />
</StackPanel>
</Grid>
</Window>
На форме есть ListBox, который заполняется CheckBox-ами. Заполнение происходит корректно.
Однако если я снять выделенные checkbox, то обновление во ViewModel ( listc ) не происходит.
Как я понимаю, что обновление listc не происходит:
Во ViewModel на
set { listc = value;
OnPropertyChanged("IsSelected");
}
стоит breakpoint.
Запускаю приложение в режиме дебага. И снимаю и ставлю галочки в checkbox. Попадания в breakpoint не происходит.
BaseViewModel
public class BaseViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName]string prop = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
Просьба отвечать как можно более подробно, ибо wpf и mvvm занимаюсь совсем недавно.
Общий смысл задачи:
Получаю коллекцию столбцов datagrid.
Пользователь выбирает какие из столбцов ему необходимы.