Ramy82 Ответов: 1

Показать результат в таблице данных в зависимости от выбранного значения поля со списком


привет,
я столкнулся с проблемой я не могу решить я искал много, но оно не работает, я, используя шаблон MVVM я успешно загружены все сведения о сотруднике в моем DataGrid и у меня есть поле со списком загрузки его с пола, чтобы отфильтровать строки DataGrid с пола, но DataGrid не обновляется, чтобы показать новый список , я Inotifychangedproperty но это бесполезно я, показывая мой код, чтобы мне советы

Что я уже пробовал:

public EditaEmployeesViewModel()
{



	SelectionChangedCommand = new RelayCommand(cbGenderSelectedChanged);

	_EmployeeList = new ObservableCollection<Model.Employees> 
	(DataAccess.EmplyeeDatabaseLayer.GetEmployeeFromDataBase());

	_GenderList = new ObservableCollection<Model.Gender> 
	(DataAccess.GenderDataBaseLayer.GetGenderFromDataBase());
}

ObservableCollection<Model.Employees> _EmployeeList;
ObservableCollection<Model.Gender> _GenderList;

public RelayCommand SelectionChangedCommand { get; set; }

void cbGenderSelectedChanged(object parameter)
{
	_EmployeeList = new ObservableCollection<model.employees> 
	(DataAccess.EmplyeeDatabaseLayer.GetEmployeesWithGenderID(SelectedGenderID));
}

public ObservableCollection<model.employees> EmployeeList
{
	get
	{
		return _EmployeeList;
	}
	set
	{
		_EmployeeList = value;
		Notifypropertychange("EmployeeList");
	}
}

public ObservableCollection<model.gender> GenderList
{
	get
	{
		return _GenderList;
	}
	set
	{
		_GenderList = value;
		Notifypropertychange("GenderList");
	}
}

public event PropertyChangedEventHandler PropertyChanged;

private void Notifypropertychange(string propertyName)
{
	if (PropertyChanged != null)
	{
		PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
	}
}

вот мой combobox и datagrid
<ComboBox ItemsSource="{Binding GenderList,UpdateSourceTrigger=Explicit}" 

          DisplayMemberPath="GenderName" SelectedValuePath="ID"

          Grid.Column="1" Name="cbGender"  SelectedValue="{Binding 
          SelectedGenderID}"  IsSynchronizedWithCurrentItem="True" >
			<i:Interaction.Triggers>
				<i:EventTrigger EventName="SelectionChanged">
					<i:InvokeCommandAction  Command="{Binding 
					 SelectionChangedCommand}"/>
				</i:EventTrigger>
			</i:Interaction.Triggers>
		</ComboBox>

<DataGrid Grid.Row="2" AutoGenerateColumns="False" CanUserAddRows="False" 

          SelectedItem="{Binding SelectedEmployee}"

          ItemsSource="{Binding EmployeeList,UpdateSourceTrigger=PropertyChanged}"

          SelectionMode="Single" SelectedIndex="{Binding SelectedIndex}"

		  IsSynchronizedWithCurrentItem="True">

1 Ответов

Рейтинг:
4

Graeme_Grant

Вы нарушаете правила привязки данных, когда выбираете элемент в своем выпадающем списке.

void cbGenderSelectedChanged(object parameter)
{
    _EmployeeList = new ObservableCollection<model.employees> 
    (DataAccess.EmplyeeDatabaseLayer.GetEmployeesWithGenderID(SelectedGenderID));
}

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

Поэтому, чтобы исправить это, вам нужно сделать что-то вроде:
void cbGenderSelectedChanged(object parameter)
{
    _EmployeeList.Clear();
    for each (var item in DataAccess.EmplyeeDatabaseLayer
                                    .GetEmployeesWithGenderID(SelectedGenderID))
    {
        _EmployeeList.add(item);
    }
}


Ramy82

спасибо за хороший совет

Ramy82

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