none
Binding an Konstante funktioniert nicht RRS feed

  • Frage

  • Hallo ich brauche mal wieder Eure Hilfe.

    Ich bin gerade dabei in mein Projekt eine Online-Hilfe einzubinden. 

    Folgender Code in Window_Main funktioniert wie gewollt:

    <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Batterie_Manager_WPF" xmlns:BatManClasses="clr-namespace:BatManClasses" x:Class="Batterie_Manager_WPF.Window_Main" mc:Ignorable="d" xmlns:h="clr-namespace:LibWpfHelpProvider" h:HelpProvider.HelpContext="local:TConst.HELP_Einfuhrung" Title="Batterie-Manager" Height="768" Width="1024" FontSize="14" WindowStartupLocation="CenterScreen" Closing="Window_Closing" Loaded="Window_Loaded" Background="{DynamicResource {x:Static SystemColors.ControlLightBrushKey}}"> <Window.Resources> <Style x:Key="CellTextAlignCenter" TargetType="{x:Type DataGridCell}"> <Setter Property="TextBlock.TextAlignment" Value="Center"/> </Style> </Window.Resources> <Window.CommandBindings> <CommandBinding Command="local:TCommands.OpenFile" Executed="OpenFileCommand_Executed" /> <CommandBinding Command="local:TCommands.SaveFile" Executed="SaveFileCommand_Executed" CanExecute="SaveFileCommand_CanExecute"/>

    .... </Window.CommandBindings>

    namespace Batterie_Manager_WPF
    {
        public class TConst
        {
            public const string HELP_Einfuhrung = "3";               // Topic: "Einführung"
            public const string HELP_Einstellungen = "10";           // Topic: "Einstellungen"
        }
    }
    

    folgendes funktioniert nicht wie gewünscht:

    <Window x:Class="Batterie_Manager_WPF.Window_Setup"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:h="clr-namespace:LibWpfHelpProvider"
            xmlns:local="clr-namespace:Batterie_Manager_WPF"
            mc:Ignorable="d"
            h:HelpProvider.HelpContext="local:TConst.HELP_Einstellungen"
            Title="Einstellungen" Height="221" Width="513" ResizeMode="NoResize" WindowStartupLocation="CenterOwner" Loaded="Window_Loaded">
        <Window.DataContext>
            <local:VM_SetupData/>
        </Window.DataContext>
        <Window.CommandBindings>
            <CommandBinding Command="local:TCommands.Btn_Abbr"  Executed="BtnAbbr_Command_Executed" />
            <CommandBinding Command="local:TCommands.Btn_Ok"  Executed="BtnOK_Command_Executed" CanExecute="BtnOK_Command_CanExecute"/>
        </Window.CommandBindings>
    

    Dem HelpProvider.HelpContext wird im Window_Main der Wert "3" zugewiesen und die richtige Seite der CHM-Hilfe angezeigt.

    Im Window_Setup wird dem HelpProvider.HelpContext "local:TConst.HELP_Einstellungen" zugewiesen und nicht der Wert "10" aus TConst. Es wird dadurch nicht die gewünschte Seite, sondern die Startseite der CHM-Hilfe angezeigt.

    Der Code in den beiden -axml-Dateien ist doch in meinen Augen gleich. Warum erhält  HelpProvider.HelpContext einmal den richtigen Wert und einmal den falschen?

    Was mache ich falsch?

    Falls Eure Glaskugel defekt ist und Ihr deshalb noch mehr Informationen braucht, lasst es mich wissen.

    Viele Grüße

    Klaus

    Montag, 11. November 2019 14:17

Antworten

  • So, nun habe ich endlich selbst den Fehler gefunden:

    Im Windows_Setup habe ich folgende Zeilen geändert:

    h:HelpProvider.HelpContext="{Binding HELP_Einstellungen, Mode=OneWay}"  

        <Window.DataContext>
            <local:TConst/>
        </Window.DataContext>

    und in TConst:

     public static string HELP_Einstellungen { get; } = "10"; 

    Damit funktioniert es wie gewünscht.

    Grüße Klaus

    • Als Antwort markiert Klaus Raabe Donnerstag, 14. November 2019 11:02
    Donnerstag, 14. November 2019 11:02

Alle Antworten

  • Hallo Klaus,

    Um dieselbe HelpProvider-Komponente zum Anzeigen verschiedener Webseiten für verschiedene Kontexte zu verwenden, müsstest Du den HelpNamespace-Eigenschaftswert programmgesteuert in die entsprechende Hilferessource anpassen. Informationen dazu werden im nachfolgenden Artikel ausführlich beschrieben:
    Integrate Help Into Your .NET Apps

    Gruß,

    Ivan Dragov


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Dienstag, 12. November 2019 13:17
    Moderator
  • Hallo Ivan,

    Danke für Deine Antwort. Sie bringt mich aber nicht wirklich weiter.

    Dein Link bezieht sich auf die Anwendung des HelpProvider in Windows-Form-Anwendungen. Ich habe aber eine WPF-Anwendung und verwende den HelpProvider aus: A Context-Sensitive Help Provider in Wpf

    Dieser funktioniert auch wie gewollt, wenn ich in der .xaml von Window_Setup statt h:HelpProvider.HelpContext="local:TConst.HELP_Einstellungen"  h:HelpProvider.HelpContext="10" verwende.

    D.h. local:TConst.HELP_Einstellungen wird aus einem mir unbekannten Grund nicht aufgelöst. Das ist mein Problem.

    Ich helfe mir jetzt, in dem ich HelpProvider.HelpContext den entsprechenden Wert im Code-Behind zu weise. So funktioniert es wie gewünscht.

    Grüße Klaus

    Dienstag, 12. November 2019 16:33
  • So, nun habe ich endlich selbst den Fehler gefunden:

    Im Windows_Setup habe ich folgende Zeilen geändert:

    h:HelpProvider.HelpContext="{Binding HELP_Einstellungen, Mode=OneWay}"  

        <Window.DataContext>
            <local:TConst/>
        </Window.DataContext>

    und in TConst:

     public static string HELP_Einstellungen { get; } = "10"; 

    Damit funktioniert es wie gewünscht.

    Grüße Klaus

    • Als Antwort markiert Klaus Raabe Donnerstag, 14. November 2019 11:02
    Donnerstag, 14. November 2019 11:02