Pregunta

He buscar alta y baja y no puede encontrar una respuesta a esto. Tengo dos preguntas

  1. ¿Cómo se crea una matriz o colección en XAML. Tengo una matriz que quiere meter ahí y se unen a un cuadro combinado. Mi primera idea era poner ItemsControl en un diccionario de recursos, pero el ItemsSource de un cuadro combinado espera IEnumerable de manera que no funcionaba.

Esto es lo que he intentado en mi diccionario de recursos y no funciona ninguno

<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>

y es como me ato a aquí

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

                    </ComboBox>

EDIT: ACTUALIZACIÓN

Tengo esta primera parte para trabajar de esta manera

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

Sin embargo, prefiero no uso una lista de arreglo, me gustaría utilizar una lista genérica de modo que si alguien sabe cómo por favor hágamelo saber.

EDITAR ACTUALIZACIÓN: supongo XAML tiene un apoyo muy limitado para los genéricos así que tal vez una lista de arreglo es lo mejor que puedo hacer por ahora, pero todavía me gustaría ayuda en la segunda pregunta, si alguien tiene una Anser

segundo. He intentado hacer referencia a un diccionario de recursos fusionada en mi XAML y tenía problemas porque bajo Window.Resources que tenía algo más que el diccionario lo que me obligó a añadir x: Key. Una vez que agrego la tecla, el sistema ya no puede encontrar los artículos en mi diccionario de recursos. Me tuve que cambiar el diccionario fusionada a Grid.Resources lugar. Idealmente me gustaría hacer referencia al diccionario fusionada en el App.xaml pero tengo el mismo problema

A continuación, algunos ejemplos de código. Esta primera parte requiere una x: clave para compilar porque tengo convertidor y se quejó de que cada artículo debe tener una clave si hay más de un

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

tuve que cambiarlo a este

<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>

Gracias

¿Fue útil?

Solución

Por lo que yo entiendo su problema desea enlazar un cuadro combinado (o un cuadro de lista) con una serie de artículos, ¿verdad? Si desea que los elementos de una fuente de datos externa, sólo puede hacer uso de la propiedad DataContext práctico. Buscar de MSDN para obtener más información. Sin embargo, si usted quiere un recolección manual, hacerlo de esta manera:

Crea tu propia clase:

public class StringCollection : ObservableCollection<string> { }

y ahora utilizar de esta manera:

<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}" />

O, si quieres colección más genérico crear una clase como esta:

public class ObjectCollection : ObservableCollection<object> { }

y utilizar de esta manera:

    <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}" />


También es posible que desee hacer uso de algunas clases incorporado como Int32Collection que implementa IEnumerable. Se puede utilizar directamente como un recurso.


La propiedad Resources (de cualquier FrameworkElement como Window, UserControl o Application) es de tipo no ResourceDictionary colección de diccionarios de recursos! por lo que no puede hacerlo de esta manera:

<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>

En su lugar hacer como esto:

<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>

Espero que esto ayude.
Saludos, Mihir Gokani

Otros consejos

Por favor, corríjanme si me equivoco, pero creo que quieres algo como esto?

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

En la parte superior de la ventana que tendría una propiedad:

xmlns:local="clr-namespace:MyNamespace"

Y dentro de su código que tendría que:

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

La unión que sucedería en un control con una propiedad de algo como esto:

ItemsSource="{StaticResource MyCustomCollection}"

Para obtener los recursos, sólo tiene necesitas mover su convertidor adicional en el ResourceDictionary recién declarado:

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

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

Si se agrega diccionario de recursos dentro de los recursos de la ventana, usted no será capaz de acceder a él en todas partes, en cambio se debe añadir en el "App" 's recursos (echa un vistazo archivo App.xaml).

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

Este estará disponible en todos los objetos de WPF independientemente de la creación de cualquier jerarquía de herencia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top