Kann geschlossen werden.
Die Lösungen :
https://stackoverflow.com/questions/41508557/soap-from-tsql-in-sql-server
https://stackoverflow.com/questions/29305600/grant-role-to-exec-stored-procedures
haben bei mir zum gewünschten Ergebnis geführt.
Ich kriege schon beim ausführen von
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT
den Wert 16711422 zurück, aber müsste dort laut Doku nicht eine 0 wiederkommen wenn es erfolgreich war?
Nvm.
EXEC @hr = sp_OACreate 'MSXML2.XMLHTTP', @object OUT
Gibt korrekt eine 0 zurück.
verwendetes Datenbanksystem: MSSMS 17
Hallo zusammen,
ich möchte gern meine Soap Request in Zukunft über die Datenbank abfeuern.
Ich hab mir dazu mal ein passendes Statement rausgesucht.
https://stackoverflow.com/questions/33449/can-you-call-a-webservice-from-tsql-code
CREATE PROCEDURE CALLWEBSERVICE(@Para1 ,@Para2)
AS
BEGIN
Declare @Object as Int;
Declare @ResponseText as Varchar(8000);
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'get', 'http://www.webservicex.com/stockquote.asmx/GetQuote?symbol=MSFT','false'
Exec sp_OAMethod @Object, 'send'
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
Select @ResponseText
Exec sp_OADestroy @Object
END
Das Statement zum Xml Request hab ich mir von der SoapUI zusammenbauen lassen der funktioniert dort auch super, deswegen denke ich nicht das es daran liegt.
Mein Sql Statement gibt mir jedes mal als Response ein Null Wert zurück und die Request wird logischerweise auch nicht ausgeführt. Hat jemand damit Erfahrungen damit und sieht etwas was ich nicht sehe? Ich führe das Statement aktuell direkt aus nicht als Prozedur, denkt ihr das macht einen Unterschied? Lässt meine Soap Api vielleicht einfach nicht den Zugriff von der Datenbank aus zu?
Hab schon einiges probiert, aber bisher noch keinen Weg gefunden, sollte doch aber möglich sein oder?
Grüße
Naja so gesehen würde er nicht permanent speichern bzw. er würde sie zwar immer ins Model schreiben, aber das Model schreibt nicht bei jeder Änderung in die Datenbank.
Mich persönlich würde es aktuell nicht stören, ich würde es sogar begrüßen.
Frag nur nach bevor ich in 2 Wochen irgendein Problem habe und mir jeder sagt was ist das denn für ein Müll 🤔
Wäre es semantisch falsch wenn ich im Set zusätzlich auch noch in mein Model schreibe und das quasi nicht erst über eine extra Funktion wie Save() handhabe?
Weil ich in meinem IDataErrorInfo direkt mit den Models arbeite, weil ich dort ja zuvor auch immer die Daten aktuell hatte und das jetzt dann erst der Fall ist wenn ich die Save() Funktion aufgerufen habe.
Beispiel :
public int Field1
{
get => _field1;
set { _field1 = value; model.Field1 = value; Raise(nameof(Field1)); }
}
Funktioniert super, danke.
Ich muss ja an irgendeiner Stelle auf dem Schlauch stehen oder etwas falsch machen.
Ich hab das jetzt abgeändert das mein Model im ViewModel abgeändert wird und das jeweilige PropertyChanged Event ausgelöst wird.
public PreparationOfPreparationIdModel PreparationOfPreparationId
{
get { return _PreparationOfPreparationId; }
set { _PreparationOfPreparationId = value; Raise(nameof(PreparationOfPreparationId)); }
}
public string TextBoxEditorOfDistributionSamplingText
{
get { return PreparationOfPreparationId.EditorOfDistributionSampling; }
set { PreparationOfPreparationId.EditorOfDistributionSampling = value; Raise(nameof(TextBoxEditorOfDistributionSamplingText)); }
}
<mah:DateTimePicker Grid.Column="1"
HorizontalContentAlignment="Center" VerticalContentAlignment="Center"
SelectedDate="{Binding PreparationOfPreparationId.EndOfPreparation.DateTimePickerDateOfDistributionSamplingSelectedDate, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="GotMouseCapture">
<i:InvokeCommandAction Command="{Binding PreparationOfPreparationId.EndOfPreparation.DateTimePickerDateOfDistributionSamplingGotMouseCaptureCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</mah:DateTimePicker>
Allerdings aktualisiert er nach Änderung des Models eben nicht die einzelnen Propertys im View ab und mein IDataErrorInfo geht damit auch flöten.
Grüße
_Ich guck nebenbei schon im Beispielprojekt nach.
_
Ja, so passiert das bei mir ja auch, nur beim wechsel der Nummer, ändert sich bei mir das Model im Hintergrund wodurch das ViewModel ja nicht weiß das sich was geändert hat.
Möchte ich nicht ausschließen wenn ich einen Fehler gemacht habe, eventuell finden wir ihn ja.
Wie erkläre ich das am besten, ich habe verschiedene Nummern hinter jeder Nummer steckt ein Model mit verschiedenen Daten drinne innerhalb der Ansicht kann ich die Nummer ändern, dann werden auch die Daten aus dem Model aktualisiert, aber das ViewModel wurde ja schon instanziert und die UI wurde ja auch bereits fertig geladen, deswegen dache ich bzw. hab das dann mit dem Raise(String.Empty) gelöst.
Ich hab mal den Threadnamen nochmal angepasst.
Ich suche also quasi eine Lösung eine Möglichkeit mitzubekommen wenn ich mit Raise(String.Empty) nochmal alle Properties durchlaufe, wann dieser Prozess fertig ist.
Danke erstmal für die Antwort.
Okay, also wenn das gänig so ist das man solche Events im Setter steuern sollte dann würde ich das mal abändern, das hilft mir schon mal und löst natürlich auch erstmal das Problem.
Und zu der anderen Sachen, durch PropertyChange(String.Empty) löse ich ja nochmal alle Properties aus um die Ansicht zu aktualisieren, allerdings hilft mir da auch kein Event weiter um zu wissen wann auch das letzte Property durchlaufen ist. Und dazu fällt mir auch persönlich keine gute Lösung ein.
Mit deinem zweiten Punkt meins du dann wahrscheinlich ich registiere ein Event oder setze ein Flag quasi beim auslösen des Ganzen und muss das dann selber beim letzten Property dann wieder ändern? Werden die Properties von oben nach unten durchlaufen?
Ich hätte es auch am liebsten in meiner ViewModelBase Klasse allerdings fällt mir grad kein Weg ein wie ich selber herausfinde das gerade das letzte Property durchlaufen ist in der Klasse.
Also ist es eigentlich gängig gar keine Events zu nutzen?
Und so etwas nur im MVVM im Setter umzusetzen?
*Edit : Aber mal abgesehen davon gibt es trotzdem eine Möglichkeit das überhaupt so umzusetzen? Rein interessehalber
Hallo zusammen,
ich wusste mich schon nicht richtig beim Threadnamen auszudrücken.
Beim Laden meiner Ansicht werfe ich das Event Raise(String.Empty) um nachträglich nochmal alle Propertys zu durchlaufen um mein IDataErrorInfo auch beim neuladen der Daten immer aktuell zu halten.
Nun hab ich das Problem das dadurch auch zum Beispiel die Events für Checkboxen ausgelöst werden und dadaruch Werte von mir verändert werden. Wenn ich mir ein Flag im Loaded Event setze hilft mir das leider nicht, gibt es eine Möglichkeit herauszufinden ob aktuell irgendwelche PropertyChanged Events geraised werden?
Grüße
Okay es liegt am IsEditable = true, so viel hab ich schon mal herausgefunden.
Edit : Okay, ich habs. Irgendwie beißt sich das mit dem ItemTemplateSelector und dem IsEditable, wenn man aber zusätzlich noch den TextSearch.TextPath mit angibt funktioniert es wieder.
Mich würde zwar interessieren wie das alles zusammenhängt, aber bin erstmal froh das es funktioniert.
Auch wenn es sich falsch anfühlt 🤔
Grüße
<Filterable:FilterableComboBox Grid.Column="2"
HorizontalContentAlignment="Center" VerticalContentAlignment="Center"
ItemsSource="{Binding ComboBoxWithdrawalSystemChargeItemsSource, UpdateSourceTrigger=PropertyChanged}"
ItemTemplateSelector="{DynamicResource ItemTemplateSelector}"
SelectedItem="{Binding ComboBoxWithdrawalSystemChargeSelectedItem, UpdateSourceTrigger=PropertyChanged}"
TextSearch.TextPath="NumberOfCharge"
Style="{StaticResource BaseComboBox}">
<Filterable:FilterableComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
</Filterable:FilterableComboBox.ItemContainerStyle>
<Filterable:FilterableComboBox.Resources>
<DataTemplate x:Key="SelectedTemplate">
<TextBlock Text="{Binding Path=NumberOfCharge}"/>
</DataTemplate>
<DataTemplate x:Key="DropDownTemplate">
<TextBlock Text="{Binding Path=DisplayMemberPath}"/>
</DataTemplate>
<ItemTemplateSelector:ComboBoxItemTemplateSelector x:Key="ItemTemplateSelector"
SelectedTemplate="{StaticResource SelectedTemplate}"
DropDownTemplate="{StaticResource DropDownTemplate}"/>
</Filterable:FilterableComboBox.Resources>
</Filterable:FilterableComboBox>
Hier mal ein Bild zum ansehen. Im Dropdown greift es, nach der Selection nicht mehr.
(Wie gesagt bei der normalen ComboBox funktioniert es)
Probier ich gleich mal aus, kann mir aber nicht vorstellen das es daran liegt. Das DropDownTemplate erkennt er ja und das wird auch ausgelöst, das SelectedTemplate wird allerdings nur einmal am Anfang wo es null ist ausgelöst, danach wenn man den Wert wechselt nicht, ich denke das es irgendwas mit dem SelectionChanged zu tun hat, weil dort ja einige Funktionen überschrieben werden. Und bei einer normalen ComboBox funktioniert der Aufruf ja auch, aber ich probiere es mal aus 😃
Edit : unverändert
Hallo zusammen,
ich nutze zur Zeit eine FilteralbeComboBox den ich hier gefunden habe :
Die Lösung die dort angeboten wird funktioniert soweit auch einwandfrei.
Nur nutze ich bei einigen ComboBoxen die ich dadurch jetzt ersetzen möchte einen ItemTemplateSelector, der funktionierte bisher auch super. Ich denke mal das in der Klasse irgendwas überschrieben wird was dort in Konflikt kommt, jedenfalls wird nach der Auswahl das SelectedTemplate nicht mehr ausgelöst.
Hab mich jetzt schon eine Weile mit auseinandergesetzt, aber ich seh es einfach nicht, eventuell kann mir ja jemand weiterhelfen.
<Filterable:FilterableComboBox Grid.Column="2"
HorizontalContentAlignment="Center" VerticalContentAlignment="Center"
ItemsSource="{Binding ComboBoxWithdrawalSystemChargeItemsSource, UpdateSourceTrigger=PropertyChanged}"
ItemTemplateSelector="{DynamicResource ItemTemplateSelector}"
SelectedItem="{Binding ComboBoxWithdrawalSystemChargeSelectedItem, UpdateSourceTrigger=PropertyChanged}"
Text="{Binding ComboBoxWithdrawalSystemChargeText, UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource BaseComboBox}">
<Filterable:FilterableComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
</Filterable:FilterableComboBox.ItemContainerStyle>
<Filterable:FilterableComboBox.Resources>
<DataTemplate x:Key="SelectedTemplate">
<TextBlock Text="{Binding Path=NumberOfCharge}"/>
</DataTemplate>
<DataTemplate x:Key="DropDownTemplate">
<TextBlock Text="{Binding Path=DisplayMemberPath}"/>
</DataTemplate>
<ItemTemplateSelector:ComboBoxItemTemplateSelector x:Key="ItemTemplateSelector"
SelectedTemplate="{StaticResource SelectedTemplate}"
DropDownTemplate="{StaticResource DropDownTemplate}"/>
</Filterable:FilterableComboBox.Resources>
</Filterable:FilterableComboBox>
Grüße
Warum verwendest du eigentlich nicht MVVM? Dann kannst du doch den Command aufrufen wenn sich ein Setter ändert.
Ich verwende MVVM, aber es gibt ja ein passendes Event zu der Geschichte deswegen fand ich es auch angebracht das zu benutzen. Aber ja man könnte es auch über den Setter machen nur wird dann ja jeder Änderung geschrieben, mir reicht es ja wenn die letzte Auswahl vom Benutzer gespeichert wird.
Weil 30 Jahre SW Entwicklung gezeigt haben das es die falsche Herangehensweise ist.
Und beim verlassen der Zeile automatisch speichern wird dir auch über kurz oder lang auf die Füße fallen.
Und wie sieht die richtige Herangehensweise aus?
Weil?
Hab es jetzt über das MouseLeave Event gesteuert, gefällt mir zwar nicht, aber mir fällt auch nichts besseres ein
Und was kann ich da am besten machen?
So gesehen .. Richtig 🙁
Wenn du zwei Zeilen hast und zwischen der ersten und zweiten wechselst wird es ausgelöst.
Existiert nur eine Zeile und ich wechsel den Tab passiert nichts, klick ich aber auf ein anderes Control wird es wieder ausgelöst.
Hallo zusammen,
mein RowEditEnding Event wird nicht ausgelöst, wenn sich nur eine Zeile im Steuerelement befindet, es sei denn man klickt auf ein anderes Steuerelement dann merkt das DataGrid wohl das es keinen Focus mehr hat, selbst beim TabItem Wechsel wird es nicht ausgelöst.
Hat damit jemand schon Erfahrungen sammeln können?
<DataGrid ItemsSource="{Binding DataGridExtraTubesItemsSource, UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding DataGridExtraTubesSelectedItem, UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource BaseDataGrid}"
RowStyle="{StaticResource BaseDataGridRow}"
x:Name="DataGridExtraTubes">
<i:Interaction.Triggers>
<i:EventTrigger EventName="RowEditEnding">
<i:InvokeCommandAction Command="{Binding DataGridExtraTubesRowEditEndingCommand}" CommandParameter="{Binding ElementName=DataGridExtraTubes, Path=SelectedItem}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</DataGrid>
Grüße
Und ein XAML mit dem Binding?
EDIT sagt, Bindingfehler sieht man - wenn vorhanden - im Output.
<mah:DateTimePicker Grid.Column="1"
FocusBehavior:FocusBehavior.IsFocused="{Binding PreparationOfPreparationId.DateTimePickerDateOfStartPrecoolingIsFocused, UpdateSourceTrigger=PropertyChanged}"
SelectedDate="{Binding PreparationOfPreparationId.DateTimePickerDateOfStartPrecoolingSelectedDate, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"/>
Gibt's 'nen Fehler zum dazugehörigen Binding?
Nee, kommt keine Fehlermeldung dazu.
Muss man sich den irgendwo im besonderen Detail angucken?
Weil rein vom Programm kommt keine Fehlermeldung, beim ersten mal klappt das auch wunderbar, beim zweiten mal wird der Wert auch korrekt genommen im Code, aber in der Oberfläche nicht angezeigt.
Ja: wenn es nicht korrekt implementiert ist 😃
Falsche Antwort 😃
Hallo zusammen,
ich hab das Problem das meine UI den Wert nicht anzeigt, obwohl er im Hintergrund korrekt geändert wurde. INotifyfPropertyChanged ist korrekt implementiert.
Hatte jemand das Phänomen schon mal?
Grüße
public DateTime? DateTimePickerDateOfStartPrecoolingSelectedDate
{
get
{
if (!DateTimePickerDateOfStartPrecoolingIsFocused)
{
if (PreparationOfPreparationId.DateOfStartPrecooling == null)
{
return PreparationOfPreparationId.PrecoolingInsert != null ? PreparationOfPreparationId.PrecoolingInsert.Date : null;
}
}
return PreparationOfPreparationId.DateOfStartPrecooling;
}
set
{
PreparationOfPreparationId.DateOfStartPrecooling = value; Raise(nameof(DateTimePickerDateOfStartPrecoolingSelectedDate));
// DateOfEndPrecooling
Raise(nameof(DateTimePickerDateOfEndPrecoolingSelectedDate));
}
}
Ich würde empfehlen: Schreib konkrete Logik die dein zusammengesetztes Property wirklich ändert wenn sich eine der Abhängigkeiten ändert. Dadurch musst du keine bestimmte Logik mehr nachziehen wenn es um Validierung o.ä. geht, denn dein PropertyChanged wird ja wirklich geworfen weil es sich geändert hat. Das hat auch den Vorteil der Nachvollziehbarkeit im Code.
Hast du eventuell ein Beispiel für mich? Offensichtlich weiß ich ja aktuell nicht wie man es besser machen könnte, würde aber gerne eine ordentliche Lösung forcieren.
Dann könnte ViewModelA doch im einfachsten Fall das PropertyChanged-Event von ViewModelB abonnieren und sich dadurch informieren lassen.
Ja, würde ich normalerweise auch so machen, aber ViewModelB erbt von einer Klasse die sich darum kümmert, da komm ich dann doch nicht mehr so einfach an das Event ran oder?
Weil ViewModelA Felder hat die eine Datenvalidierung besitzen die abhängig sind von Werten aus ViewModelB.
A kennt alles von B aber B nichts von A.
Eigentlich hab ich dazu schon alles geklärt.
Ich hab ViewModelA mit einem Model wo sich Daten drin befinden.
Ich habe ViewModelB wo sich ebenfalls das gleiche Model wiederfindet.
In ViewModelB zum Beispiel wird der Wert mit einem Datumsfeld verknüpft, wenn dieser sich ändert, beeinflusst das eine Datenvalidierung (IDataErrorInfo) in ViewModelA, deswegen würde ich gerne irgendwie das PropertyChange Event aus ViewModelB auch nach ViewModelA weiterleiten.
Daher meine Frage.
Grüße
Hallo zusammen,
ich hab ein ViewModelA worin sich ein weiteres ViewModelB befindet. Gibt es irgendeinen bekannten Weg wie ich quasi das PropertyChange Event von ViewModelB in ViewModelA weiterleite um dort mitzubekommen der Wert hat sich ebenfalls geändert um das ggf. im IDataErrorInfo Interface abzufangen?
Oder macht man so etwas generell nicht?
Grüße
Hier die Lösung zum Problem.
https://stackoverflow.com/questions/41169165/wpf-textbox-with-validation-loses-errortemplate
<TextBox Grid.Column="2"
HorizontalContentAlignment="Center" VerticalContentAlignment="Center"
IsReadOnly="True"
mah:TextBoxHelper.ClearTextButton="False"
Text="{Binding VolumeOfCordBloodText, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"
Validation.ErrorTemplate="{StaticResource DifferentValidationErrorTemplate}"
Style="{StaticResource BaseTextBox}"/>
Im ViewModel ist nur das Interface eingebunden wo der Fehler geworfen wird.
Wird halt nur beim Laden nicht angezeigt.
* Im Programmverlauf wird er natürlich korrekt angezeigt.
Da IDataErrorInfo nur ein Interface ist wird es ohne ein Stückchen Code von dir schwer werden etwas zu sagen...
Servus,
ich kann dazu gerne Code schicken, nur ist das kein Fehler meinerseits 🤔
Kannst es gerne selber ausprobieren, das funktioniert schlichtweg nicht.
Darfst mich gerne vom Gegenteil überzeugen, irre mich in dem Fall gerne 😁
Hallo zusammen,
irgendwie scheint das Interface beim erstmaligen Laden die Controls nicht einzufärben obwohl die Errors geworfen werfen.
Hat damit schon mal jemand Erfahrung gesammelt oder weiß wie man das löst?
Grüße
Hallo,
das Ergebnis hab ich auch gefunden dort wird aber irgendwie nicht richtig beschrieben wie und wann die einzelnen Methoden aufgerufen oder verarbeitet werden. Ich habe gegoogled. Und wenn du selber damit noch nicht gearbeitet hast, bringt mir auch dein erster Google Treffer nichts. Ansonsten darfst du deine persönlichen Erfahrungen gerne teilen.
Grüße
Hallo zusammen,
was benutzt ihr um Daten nach Validierung wieder auf ihren Ursprungswert zu setzen?
Ich hab jetzt ein paar mal IEditableObject gelesen, finde aber nicht so recht ein Beispiel.
Deswegen wollte ich allgemein mal nach euren Erfahrungen fragen.
Grüße
Danke fürs aufhübschen, aber kann die Lösung vielleicht noch jemand bestätigen aus eigener Erfahrung? :rtfm: 🙂
bist Du ganz sicher, dass das SelectedItem, dass Du initial setzen willst, die selbe Instanz ist, die auch in der ItemsSource der ComboBox steckt?
Tatsächlich lag hier der Hund begraben. Das SelectedItem war vom selben Typ wie die ItemsSource. Die Daten haben 1 & 1 übereingestimmt, trotzdem kann man ein geladenes Object aus der ItemsSource nicht damit vergleichen.
Meine Lösung sah nun so aus das ich in der Klasse von dem Typ der ItemsSource folgendes verändert habe :
public override bool Equals(object obj)
{
if (obj == null || !(obj is ClinicStaffModel))
return false;
return ((ClinicStaffModel) obj).Id == this.Id;
}
public override int GetHashCode()
{
return Id.GetHashCode();
}
Ohne im Debugger sichtbare und übereinstimmende Object-ID könnten es immer noch nur gleiche Objekte sein.
Hm ...
bist Du ganz sicher, dass das SelectedItem, dass Du initial setzen willst, die selbe Instanz ist, die auch in der ItemsSource der ComboBox steckt?
🤔
Ich hab gerade mal
ComboBoxMaterialPreparationProtocolsClinicStaffSelectedItem = ComboBoxMaterialPreparationProtocolsClinicStaffItemsSource.Where(x => x.Id == ComboBoxMaterialPreparationProtocolsClinicStaffSelectedItem.Id).SingleOrDefault();
als Zeile ergänzt .. Und der Eintrag wird jetzt angezeigt .. Ich würde mich gern in einem Loch vergraben. Wie kann es denn sein das ich ein Item anhand der ID aus der Datenbank vom gleichen Objekttyp Lade was 100% von den Werten zur ItemsSource gehört, nicht als Member anerkannt wird?
public ClinicStaffModel ComboBoxMaterialPreparationProtocolsClinicStaffSelectedItem
{
get { return ComboBoxMaterialPreparationProtocolsClinicStaffItemsSource != null ? Item.ClinicStaff != null ? ComboBoxMaterialPreparationProtocolsClinicStaffItemsSource.Where(x => x.Id == Item.ClinicStaff.Id).SingleOrDefault() : null : null; }
set
{
Item.ClinicStaff = value;
Raise(nameof(ComboBoxMaterialPreparationProtocolsClinicStaffSelectedItem));
Raise(nameof(TextBoxMaterialPreparationProtocolsTimeShiftText));
}
}
Das kann ja nicht die Lösung des Problems sein ..
Also das sind alle Daten die ich zu den Objekten im Debugger sehen kann, wenn ich noch irgendwas ergänzen kann oder noch irgendwo nachgucken kann, klär mich bitte auf.
Im Konstruktor werden die fehlenden Daten der ItemsSource geladen, das SelectedItem ist zu der Zeit schon bekannt, ich hatte ja immer gedacht daran liegt es, aber ihr meintet Ja der Eintrag wird gesetzt sobald die ItemsSource vorhanden ist.
bist Du ganz sicher, dass das SelectedItem, dass Du initial setzen willst, die selbe Instanz ist, die auch in der ItemsSource der ComboBox steckt?
Ja, bin ich. Hab es auch gerade nochmal geprüft.
… wo / wann und wie du dein "Item" im Code setzt. Ich vermute das es damit zusammen hängt.
Im Konstruktor
<ComboBox Grid.Column="1"
Margin="4"
ItemsSource="{Binding MaterialPreparationOfProtocols.ComboBoxMaterialPreparationProtocolsClinicStaffItemsSource, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="Name"
SelectedItem="{Binding MaterialPreparationOfProtocols.ComboBoxMaterialPreparationProtocolsClinicStaffSelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
public virtual void Raise(string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
if (IsTrackingChanges) _hasChanged = true;
}
Es klappt ja auch mit anderen ComboBoxen nur mit dieser nicht, obwohl ich nichts anders mache, nur das die Daten erst zur Laufzeit geladen werden.
MaterialPreparationOfProtocols ist eigentlich nur das ViewModel nur steckt das noch in einer anderen Klasse mit drin vom Vorentwickler, hat darauf also keine Einwirkungen.
Nein, sagt mir persönlich auch nichts, also hab das noch nie versucht. Allerdings greift die TextBox ja korrekt auf den Datensatz zu. Und die ItemsSource ist auch befüllt und wird angezeigt.
Grüße
Also ich hab das Gefühl das es irgendwie daran liegt das die ItemsSource "später" geladen wird und das trotz Raise des SelectedItems es nicht ausreicht das die UI das Item auch setzt.