Ich habe eine Ansicht, die mit meinem Viewmodel verbindet. Immer wenn ein Benutzer das ausgewählte Element aus der Ansicht ändert, ergreife ich zusätzliche Daten, um sie an das ausgewählte Element anzuhängen. Wenn ich die Eigenschaft nach dem Aktualisieren des ausgewählten Elements nicht selbst erstelle, werden die Ergebnisse auf der Benutzeroberfläche nicht aktualisiert. Dies ist offensichtlich nicht die beabsichtigte Implementierung, aber vielleicht bin ich nicht sicher, wie die Immobilie benachrichtigt wird.WPF DataBinding erfordert manuelle Erhöhung
Hier ist die Backing-Eigenschaft, die an mehrere Steuerelemente bindet.
public Break SelectedData
{
get { return _selectedData; }
set
{
if (_selectedData!= value && value != null)
{
_selectedData= value;
DeviceName = value.Feeder;
OnPropertyChanged("SelectedData");
}
}
}
Hier ist die Combobox, die die Interaktion Trigger auf einen asynchronen Befehl in dem Ansichtsmodell bindet:
<ComboBox ItemsSource="{Binding Feeders}" DisplayMemberPath="OMSName" SelectedItem="{Binding SelectedData, Mode=TwoWay}" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding SelectionChangedCommand}" CommandParameter="{Binding SelectedItem}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ComboBox>
Im Ansichtsmodell, das selectionchangedcommand ausführt meine asynchrone Funktion, um zusätzliche Daten, wenn der selectionchangedcommand gesetzt :
SelectionChangedCommand = new RelayAsyncCommand(UpdateSelectedData); --In the constructor of the viewmodel
public async void UpdateSelectedData()
{
try
{
await _breakRepo.GetEventData(SelectedData);
if (SelectedData.AttachedEvent.IsOpen)
{
SelectedData.Attributes= new EventAttributes
{
TotalAffected = SelectedData.AttachedEvent.Attributes.TotalAffected,
TotalRestored = SelectedData.AttachedEvent.Attributes.TotalRestored,
TotalOut = SelectedData.AttachedEvent.Attributes.TotalOut,
TotalCritical = SelectedData.AttachedEvent.Attributes.TotalCritical,
TotalMajor = SelectedData.AttachedEvent.Attributes.TotalMajor
};
await _breakRepo.CallEventsAsync(SelectedData);
}
else
{
await _breakRepo.GetBreakByFeederAsync(SelectedData);
}
}
catch (Exception ex)
{
System.Windows.MessageBox.Show(ex.Message);
}
finally
{
//IF I ADD ONPROPERTYCHANGED("SelectedData") the other fields that bind
//to the values will update as expected
CurrentlySearching = true;
}
}
Verwenden Sie 'UpdateSourceTrigger = Explicit' – JohnyL
Können Sie die Zeile im Code angeben, wo Sie" die Eigenschaft selbst erhöhen "? –
@GregN Ihr Setter wird nicht aufgerufen und somit wird das Ereignis nicht ausgelöst. In Ihrem Befehl mutieren Sie nur 'SelectedData', die Sie nicht ersetzen. Wenn Sie es so implementiert haben, dann müssen Sie das Ereignis selbst auslösen, um die Bindung zu aktualisieren. – JSteward