Есть такая проблема при использовании WPF не срабатывает свойство set{}.
Model
public class Layer
{
private string _nameLayer;
public string NameLayer
{
get { return _nameLayer; }
set { _nameLayer = value; }
}
private bool _showLayer;
public bool ShowLayer
{
get { return _showLayer; }
set { _showLayer = value; }
}
private string _colorLayer;
public string ColorLayer { get; set; }
}
Есть ViewModel класс MainViewModel реализующий свойство
public Class MainViewModel:INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public MainViewModel
{
//в конструкторе получаем ObservableCollection<Layer> и передаем в свойство LayersCollection
}
private ObservableCollection<Layer> _layersCollection;
public ObservableCollection<Layer> LayersCollection
{
get
{
return _layersCollection ?? (_layersCollection = new ObservableCollection<Layer>());
}
set
{
_layersCollection = value;
OnPropertyChanged("LayersCollection");
}
}
}
И View (xaml)
<UserControl.Resources>
<mainViewModel:MainViewModel x:Key="Vm" />
</UserControl.Resources>
<Grid DataContext="{Binding Source={StaticResource Vm}}">
<DataGrid
Name="Layers"
AutoGenerateColumns="False"
CanUserResizeRows="False"
HorizontalGridLinesBrush="#FFE4DDDD"
ItemsSource="{Binding Path=LayersCollection, UpdateSourceTrigger=PropertyChanged}"
VerticalGridLinesBrush="#00000000">
<DataGrid.Columns>
<DataGridTextColumn
Width="*"
Binding="{Binding NameLayer}"
Header="Название слоя" />
<DataGridCheckBoxColumn
Width="auto"
Binding="{Binding ShowLayer}"
Header="Видимость" />
</DataGridTemplateColumn.CellTemplate>
</DataGrid.Columns>
</DataGrid>
</Grid>
При изменении во View коллекции свойство set{} не срабатывает, как решить проблему уже пробовал Model=TwoWay И UpdateSourceTrigger=PropertyChanged, но изменения не приходят в сеттер.
UpdateSourceTrigger и Mode нужно ставить в байнде выводимых свойств: NameLayer и ShowLayer.
Так же не помешало бы реализовать для вашего класса Layer интерфейс INotifyPropertyChanged, чтобы при изменении этих свойств они изменялись и в View. Ну и ObservableCollection поменять на BindingList.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники