У меня проблема с SelectedItem моего ListBox. Я хочу поставить мой выбранный элемент в выделенном свойстве моего HealthDiseaseViewModel Вот мой ViewModel:MVVM Как поместить ListBox SelectedItem в экземпляр класса из ViewModel
public class HealthDiseaseViewModel : ObservableCollection<HealthDisease>
{
private string _feedBack;
HealthDiseaseDb _db = new HealthDiseaseDb();
public HealthDiseaseRetrieveSingleCommand RetrieveSingleCommand { get; set; }
public HealthDiseaseRetrieveManyCommand RetrieveManyCommand { get; set; }
public HealthDiseaseUpdateCommand UpdateCommand { get; set; }
public HealthDisease Entity { get; set; }
public HealthDisease Highlighted { get; set; }
public List<HealthDisease> EntityList { get; set; }
public HealthDiseaseViewModel()
{
RetrieveSingleCommand = new HealthDiseaseRetrieveSingleCommand(this);
RetrieveManyCommand = new HealthDiseaseRetrieveManyCommand(this);
UpdateCommand = new HealthDiseaseUpdateCommand(this);
Highlighted = new HealthDisease();
Entity = new HealthDisease();
RetrieveMany(Entity);
}
#region Methods
public void Retrieve(HealthDisease parameters)
{
Highlighted = _db.Retrieve(parameters);
}
public void RetrieveMany(HealthDisease parameters)
{
EntityList = new List<HealthDisease>();
EntityList = _db.RetrieveMany(parameters);
IList<HealthDisease> toBeRemoved = Items.ToList();
foreach (var item in toBeRemoved)
{
Remove(item);
}
foreach (var item in EntityList)
{
Add(item);
}
}
public void Insert(HealthDisease entity)
{
bool doesExist = false;
if (_db.Insert(entity, SessionHelper.CurrentUser.Id, ref doesExist))
{
_feedBack = "Item Successfully Saved!";
RetrieveMany(new HealthDisease());
}
else if (doesExist)
{
_feedBack = "Item Already Exists!";
}
else
{
_feedBack = "Not All Fields Were Filled-In!";
}
MessageBox.Show(_feedBack, "Item Insertion");
}
public void Update(HealthDisease entity)
{
bool doesExist = false;
if (_db.Update(entity, SessionHelper.CurrentUser.Id, ref doesExist))
{
_feedBack = "Item Successfully Updated!";
RetrieveMany(new HealthDisease());
}
else if (doesExist)
{
_feedBack = "Item Already Exists!";
}
else
{
_feedBack = "Not All Fields Were Filled-In!";
}
MessageBox.Show(_feedBack, "Item Edition");
}
public void Delete(HealthDisease entity)
{
var answer = MessageBox.Show(String.Format("Are you sure you want to delete \n{0}?", entity.Name),
"Item Deletion", MessageBoxButtons.YesNo);
if (answer == DialogResult.No)
{
return;
}
if (_db.Delete(entity, SessionHelper.CurrentUser.Id))
{
_feedBack = "Item Successfully Deleted!";
RetrieveMany(new HealthDisease());
}
MessageBox.Show(_feedBack, "Item Deletion");
}
#endregion
}
Я связала SelectedItem моего ListBox к Подчеркнута, и я хотел, чтобы Highlighted.Name и Highlighted.Description к TextBlocks, но TextBlocks не отображает SelectedItem. Я могу сделать работу здесь, используя SelectedItem.Name и SelectedItem.Description, но проблема в том, что она автоматически обновляет ListBox, даже если я еще не нажал кнопку сохранения. Использование объекта Highlighted решит это, но теперь я трачу часы разочарования. Вот моя разметка. Я опустил SaveButton, который связан с UpdateCommand от моего ViewModel
<Grid Name="MainGrid" Background="Aqua" MinWidth="500" MinHeight="400"
DataContext="{Binding Source={StaticResource HealthViewModel}}">
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding Path=Highlighted.Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></TextBlock>
<ListBox x:Name="EntityListBox" Margin="10,0" Height="380"
ItemsSource="{Binding }"
DisplayMemberPath="Name"
SelectedItem="{Binding Path=Highlighted, Mode=TwoWay,
Converter={StaticResource ToHealthDiseaseConverter},
UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>
</Grid>
ваш '' ItemsSource' из ListBox' должен быть список HealthDisease. –
, но HealthDiseaseViewModel наследует ObservableCollection, у которого есть INotifyProp ... не будет использовать список HealthDisease, который удалит функцию уведомления? –