Przykład — Tworzenie kaskadowego pola kombi w oknie dialogowym Data Standard

Można utworzyć wiele pól kombi (nazywanych także listami wyboru) w przypadku okien dialogowych Data Standard, gdzie następne pole kombi zależy od wyboru dokonanego w pierwszym polu kombi.

Jeśli wartość zostanie wybrana w pierwszym polu, następne pole powinno zawierać wartości oparte na pierwszym wyborze. Przykładowo mogą istnieć dwa pola kombi: jedno zawierające nazwy producentów samochodów (BMW, Mercedes, Ferrari itp.), a drugie zawierające typy samochodów wybranej firmy (dla BMW: 1, 2, 5, x2, x5...; dla Mercedesa: A, B, C, CL, CLS...).

Utwórz pole kombi

Dostępne są cztery części do tworzenia pola kombi.

  1. Utworzenie źródła danych

    Potrzebne jest źródło, z którego dane pochodzą, aby wypełnić pole kombi. System WPF zawiera własny mechanizm XML, dlatego można utworzyć plik XML, który zawiera dane. Plik XML zawiera zawartość pierwszego poziomu dla pierwszego wyboru. Każdy wpis zawiera pochodne wpisy dla drugiego wyboru. Te pochodne wpisy mogą mieć więcej elementów pochodnych, w przypadku gdy konieczne jest utworzenie trzech lub więcej poziomów zagnieżdżenia listy wyboru.

    Działania:

    Utwórz plik data.xml, skopiuj tę zawartość do pliku, a następnie zapisz plik w wybranej lokalizacji. (W tym przykładzie zapisz plik Data.xml w katalogu C:\Temp).

  2. Dodaj data.xml jako zasobu do pliku .xaml Data Standard. Dzięki temu pola kombi będą mogły korzystać z danych.

    Dodaj następujące wiersze do sekcji zasobów w pliku .xaml:

    <XmlDataProvider x:Key="comboDataSource" Source="C:\Temp\data.xml"/>

    W ten sposób cała sekcja zasobów może wyglądać następująco:

    <WPF:DSWindow.Resources xmlns:prop="clr-namespace:dataStandard.UI.View;assembly=dataStandard.UI">
        ...
        <XmlDataProvider x:Key="comboDataSource" Source="C:\Temp\data.xml"/>
    </WPF:DSWindow.Resources>

    Nowy zasób ma nazwę comboDataSource, a ścieżka wskazuje na plik data.xml.

  3. Teraz utwórz pola kombi, tak aby wskazywały na dane pierwszego poziomu w pliku XML i na odpowiedni drugi poziom.

    Oto przykład pierwszego pola kombi:

    <ComboBox x:Name="ComboCarCompanies" Grid.Column="1" Grid.Row="6"
        ItemsSource="{Binding Source={StaticResource comboDataSource}, XPath=Data/Companies/Car}" Text="{Binding Prop[CarType].Value}"
        DisplayMemberPath="@Type" SelectedValue="{Binding Prop[CarType].Value}" SelectedValuePath="@Type"/>

    Atrybut Source pierwszego pola kombi jest ustawiony na zasób StaticResource-comboDataSource, który został zdefiniowany wcześniej.

    Drugie pole kombi wygląda następująco:

    <ComboBox x:Name="ComboCarType" Grid.Column="1" Grid.Row="7"
        ItemsSource="{Binding SelectedItem, ElementName=ComboCarCompanies}" Text="{Binding Prop[CarType].Value}"
        DisplayMemberPath="@Type" SelectedValue="{Binding Prop[CarType].Value}" SelectedValuePath="@Type"/>

    Większość atrybutów w naszym przykładzie odgrywa tę samą rolę, co w pierwszym polu kombi. Rzeczywistą różnicą jest ItemSource. W tym przykładzie ItemSource pochodzi z SelectedItem pierwszego pola kombi o nazwie ComboCarCompanies.

  4. Określ definicje właściwości CarType i Car: w pliku Inventor.cfg lub AutoCAD.cfg, w zależności od narzędzia używanego w przypadku tego przykładu, dodaj definicje właściwości dla CarType i Car. Tutaj można znaleźć informacje o dodawaniu definicji właściwości w pliku konfiguracyjnym.

    Uwaga: Począwszy od programu VDS 2019 ten krok można pominąć, ponieważ nieistniejące definicje właściwości są tworzone wewnętrznie w programie VDS.
  5. Zapisz zmiany i przejrzyj okno dialogowe.