Dies ist ein vereinfachtes Beispiel. Ich habe eine Benutzersteuerung, die eine "Browse zu Ordner" -Funktion enthält, mit einem Textfeld und einer Schaltfläche. Ein Klick auf die Schaltfläche würde den Browse-Dialog öffnen und im Wesentlichen das Textfeld ausfüllen.Caliburn Micro Message.attach berücksichtigt Änderungen von Datenkontext nicht
<UserControl x:Class="MyUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:cal="http://www.caliburnproject.org"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<!-- Folder -->
<TextBlock>Path</TextBlock>
<DockPanel LastChildFill="True" Grid.Column="1">
<Button DockPanel.Dock="Right" cal:Message.Attach="[Event Click] = [Action BrowseHotFolder()]" Content="..." HorizontalAlignment="Left" Width="25" Height="25" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Margin="0,0,5,0"/>
<TextBox Text="{Binding HotFolderPath, UpdateSourceTrigger=PropertyChanged, ValidatesOnNotifyDataErrors=True}" />
</DockPanel>
</Grid>
Ich habe eine Listbox, die eine Anzahl von Objekten enthält. Das ausgewählte Objekt wird dieser Benutzersteuerung als Datenkontext zugeführt.
Jetzt sagen wir, ich habe zwei Elemente in meiner Listbox und ich habe die erste ausgewählt. Ich fülle "foo" in das Textfeld von MyUserControl. Dann wähle ich den zweiten Gegenstand und fülle "bar" aus. Die Datenbindung funktioniert einwandfrei, und für beide Elemente sind die richtigen Werte festgelegt. Wenn ich dann auf die Schaltfläche zum Durchsuchen auf der ersten Schaltfläche klicke und einen Ordner auswähle, wird das Textfeld des ersten Elements in den ausgewählten Pfad geändert. Wenn ich jedoch das zweite Element auswähle und zu einem Ordner blättere, ändert es auch das Textfeld des ersten Elements.
Meine Vermutung ist, dass die Message-Attach-Syntax nicht die Browse-Aktion auf das richtige Element aufrufen. Es ignoriert den Datenkontext (aktuell ausgewähltes Element) und verwendet nur das erste.
Was kann ich dagegen tun?