Frage

Ich habe Suche hoch und niedrig und kann keine Antwort finden. Ich habe zwei Fragen

  1. Wie man ein Array oder Sammlung in XAML erstellen. Ich habe eine Reihe bekam ich dort und binden an einem Kombinationsfeld-Stick soll. Meine erste Idee war es, ein Itemscontrol in einem Ressourcenverzeichnis zu setzen, aber die Itemssource eines Kombinationsfelds erwartet IEnumerable, so dass nicht funktioniert hat.

Hier ist, was ich in meiner Ressource Wörterbuch versucht habe und weder Werke

<ItemsControl x:Key="stateList">
    <sys:String>AL</sys:String>
    <sys:String>CA</sys:String>
    <sys:String>CN</sys:String>
</ItemsControl>
<ItemsControl x:Key="stateList2">
    <ComboBoxItem>AL</ComboBoxItem>
    <ComboBoxItem>CA</ComboBoxItem>
    <ComboBoxItem>CN</ComboBoxItem>
</ItemsControl>

und hier ist, wie ich binden an sie

<ComboBox SelectedValue="{Binding Path=State}" ItemsSource="{Binding Source={StaticResource stateList2}}"  >

                    </ComboBox>

EDIT: AKTUALISIERT

Ich habe diesen ersten Teil auf diese Weise funktioniert

 <col:ArrayList x:Key="stateList3">
    <sys:String>AL</sys:String>
    <sys:String>CA</sys:String>
    <sys:String>CN</sys:String>
</col:ArrayList>

Allerdings würde ich eher nicht eine Array-Liste verwenden, ich möchte eine generische Liste verwenden, so dass, wenn jemand weiß, wie lassen Sie es mich wissen.

EDIT UPDATE: Ich denke, XAML hat nur sehr begrenzte Unterstützung für Generika so vielleicht eine Array-Liste ist die beste ich jetzt tun kann, aber ich möchte noch Hilfe auf die zweite Frage, ob jemand hat eine Anser

2.. Ich habe versucht, ein fusionierte Ressourcenverzeichnis in meiner XAML und hatten Probleme verweisen, weil unter Window.Resources ich mehr als nur das Wörterbuch hatte, so dass es mich erforderlich hinzufügen x: Key. Sobald ich den Schlüssel hinzufügen, kann das System nicht findet mehr die Einzelteile in meinem Ressource-Wörterbuch. Ich hatte das fusionierte Wörterbuch zu Grid.Resources statt zu bewegen. Im Idealfall würde Ich mag das fusionierte Wörterbuch im app.xaml verweisen, aber ich habe das gleiche Problem

Hier ist ein Beispielcode. Dieser erste Teil erforderlich, um eine x: Schlüssel zu kompilieren, weil ich Wandler haben und sie beschwerten sich, dass jedes Element einen Schlüssel haben müssen, wenn es mehr als ein

ist
<UserControl.Resources>
    <win:BooleanToVisibilityConverter x:Key="VisibilityConverter" />
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/ResourcesD.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

Ich musste es dieses

ändern
<UI:BaseStep.Resources>
    <win:BooleanToVisibilityConverter x:Key="VisibilityConverter" />             
</UI:BaseStep.Resources>
<Grid>
    <Grid.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/ResourcesD.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Grid.Resources>
</Grid>

Danke

War es hilfreich?

Lösung

Soweit ich Ihr Problem verstehen wollen Sie eine ComboBox binden (oder eine List-Box) mit einer Reihe von Elementen, nicht wahr? Wenn Sie Elemente aus einer externen Datenquelle möchten, können Sie nur nutzen handliche Datacontext-Eigenschaft machen. Suchen MSDN für mehr zu diesem Thema. Wenn Sie jedoch noch eine manuelle Sammlung wollen, tun Sie es so aus:

Erstellen Sie Ihre eigene Klasse:

public class StringCollection : ObservableCollection<string> { }

und verwenden Sie es nun wie folgt aus:

<Window.Resources>
    <local:StringCollection x:Key="stringCollection">
        <sys:String>Hello</sys:String>
        <sys:String>World</sys:String>
    </local:stringCollection>
</Window.Resources>

...

    <ListBox
        Margin="15"
        ItemsSource="{StaticResource stringCollection}" />

Oder, wenn Sie wollen mehr generische Sammlung eine Klasse wie folgt erstellen:

public class ObjectCollection : ObservableCollection<object> { }

und es wie folgt verwendet werden:

    <local:ObjectCollection x:Key="objectCollection">
        <sys:String>Hello</sys:String>
        <TextBlock>World</TextBlock>
        <sys:Int32>12345</sys:Int32>
    </local:ObjectCollection>

    ...

    <ComboBox
        Margin="15"
        ItemsSource="{StaticResource objectCollection}" />


Sie können auch die Geräte Int32Collection Verwendung von einigen in-built-Klassen wie IEnumerable machen wollen. Sie können sie direkt als Ressource nutzen.


Die Resources Eigenschaft (von jeder FrameworkElement wie Window, UserControl oder Application) vom Typ ResourceDictionary nicht Sammlung von Ressourcen Wörterbücher! so dass Sie kann nicht zu tun wie folgt aus:

<UserControl.Resources>

    <!-- The first RD -->
    <!--<ResourceDictionary>
        <win:BooleanToVisibilityConverter x:Key="VisibilityConverter" />
    </ResourceDictionary>-->

    <!-- Second RD!!! -->
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/ResourcesD.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

tun Stattdessen wie folgt aus:

<UserControl.Resources>

    <!-- 
        There should be only 1 main RD, 
        Merge other RDs, if any
     -->
    <ResourceDictionary>

        <!-- First Resource -->
        <win:BooleanToVisibilityConverter x:Key="VisibilityConverter" />

        <!-- Second Resource -->
        <ResourceDictionary.MergedDictionaries>
            <!-- Now, there can be multiple RDs -->
            <ResourceDictionary Source="/ResourcesA.xaml" />
            <ResourceDictionary Source="/ResourcesB.xaml" />
            <ResourceDictionary Source="/ResourcesC.xaml" />
            <ResourceDictionary Source="/ResourcesD.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>

</UserControl.Resources>

Hope, das hilft.
Grüße, Mihir Gokani

Andere Tipps

Bitte korrigieren Sie mich, wenn ich falsch liege, aber ich glaube, Sie so etwas wie dies wollen?

<Grid.Resources>
  <local:MyCustomCollection x:Key="local:MyCustomCollection"/>
</Brid.Resources>

An der Spitze des Fensters Sie eine Eigenschaft haben würden:

xmlns:local="clr-namespace:MyNamespace"

Und in Ihrem Code müßten Sie:

MyCustomCollection  custCol = MyGrid.Resources["MyCustomCollection"] as MyCustomCollection;

Die Bindung passieren würde, auf einer Steuerung mit einer Eigenschaft etwas wie folgt aus:

ItemsSource="{StaticResource MyCustomCollection}"

Für die Ressourcen, brauchen Sie nur Ihre zusätzlichen Konverter in die neu deklarierte Resource Mover:

<App.Resources> 
    <ResourceDictionary> 
        <ResourceDictionary.MergedDictionaries> 
            <ResourceDictionary Source="/ResourcesD.xaml" /> 
        </ResourceDictionary.MergedDictionaries> 

    <win:BooleanToVisibilityConverter x:Key="VisibilityConverter" /> 
    </ResourceDictionary> 
</App.Resources> 

Wenn Sie Ressource-Wörterbuch innerhalb Fenster Ressourcen hinzufügen, Sie werden es nicht überall zugreifen können, stattdessen sollten Sie in „App“ 's Ressourcen (Check-out App.xaml-Datei) hinzuzufügen.

<App.Resources> 
    <win:BooleanToVisibilityConverter x:Key="VisibilityConverter" /> 
    <ResourceDictionary> 
        <ResourceDictionary.MergedDictionaries> 
            <ResourceDictionary Source="/ResourcesD.xaml" /> 
        </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</App.Resources> 

Dies wird in jedem WPF-Objekt zur Verfügung steht, unabhängig jede Vererbungshierarchie zu schaffen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top