Ich bin neu bei WPF. Ich habe irgendwo in XAML stecken. Dieser XAML-Code funktioniert:WPF Reach zu DataGridTextColumns Binding-Informationen als Zeichenfolge
<DataGridTextColumn Binding="{Binding Model.Name, UpdateSourceTrigger=PropertyChanged}">
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<DataTrigger Value="False"
Binding="{Binding DataContext.Model.Error[All],
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type DataGridRow}},
Converter={StaticResource IsNull}}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border>
<Grid>
<ContentPresenter x:Name="_cp" />
<Image Source="{DynamicResource Img.Warning}"
ToolTip="{Binding DataContext.Model.Error[Name],
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type DataGridRow}}" />
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
Ich möchte Variablen Zeichenketten wie „Alle“, „Name“ von der ersten Zeile Binding Informationen erhalten in Bild Tooltip verwenden Bindung. Wie Sie sehen können, ist die Bindungsinformation in der ersten Zeile hier "Model.Name". Ich kann nur "Name" String mit Converter bekommen, aber ich kann diese verbindliche Info nicht erreichen.
Als ich suchte, fand ich einen Vorschlag Multibinding zu verwenden und ich schrieb diesen Code:
<DataGridTextColumn Binding="{Binding Model.Name, UpdateSourceTrigger=PropertyChanged}">
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<DataTrigger Value="False">
<DataTrigger.Binding>
<MultiBinding>
<MultiBinding.Converter>
<conv:DictionaryItemConverter />
</MultiBinding.Converter>
<Binding Path="DataContext.Model.Error"
RelativeSource="{RelativeSource FindAncestor,
AncestorType={x:Type DataGridRow}}" />
<Binding Path="?????" RelativeSource="?????" />
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border>
<Grid>
<ContentPresenter x:Name="_cp" />
<Image Source="{DynamicResource Img.Warning}">
<Image.ToolTip>
<Binding>
?????
</Binding>
</Image.ToolTip>
</Image
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
Aber wie Sie sehen können, habe ich stecken die Zeichenfolge Informationen zu erhalten. BTW, DataContext.Model.Error ist eine Klasse, die wie eine Dictionary-Klasse arbeitet und DictionaryItemConverter bekommt Wert von dieser Klasse
Als Ergebnis ist mein Problem das.
Wie kann ich die Binding-Informationen von DataTextColumn als String erreichen?
Vielen Dank im Voraus für alle Antworten.
S.S .: Englisch ist nicht meine erste Sprache. Wenn ich einen Fehler gemacht habe, sorry.
P.S .: Ich habe ein Beispiel erstellt, um es zu zeigen, was ich will. Sie können es hier herunterladen: https://mega.nz/#!oIJXgLxb!eBNqOIdby0UgkKgfqgCOVqYE1O-KwQH7cfEQxk6aCd0
Danke Markus, ich kann es auf diese Weise machen, aber das will ich nicht. Ich möchte den Eigenschaftsnamen der DataGridTextColumns-Bindung erreichen. Kein Wert. Der Wert könnte alles sein. Aber ich muss 'Model.Name', 'Model.Explanation', 'Model.All' usw. als String erreichen. Im Konverter überprüft DataContext.Model.Error (eine Klasse wie Dictionary) diesen Schlüssel: string v = DataContext.Model.Error ['Name']; return! String.IsNullOrWhiteSpace (v); Wenn ich den Eigenschaftsnamen (wie 'Model.Name') als Zeichenfolge erreichen kann, kann ich es teilen und verwenden. – bafsar
also wollen Sie nur eine Lösung, um nicht alle die gleichen Sachen mit nur _All_ und _Name_ geändert zu wiederholen? –
Ich kann immer noch keinen Sinn machen, wie sieht dein ViewModel aus? Warum haben Sie ein Wörterbuch anstelle von separaten Eigenschaften wie 'AllErrors',' NameErrors', wenn Sie nur ein paar davon im Dictionary haben? –