How to set the ItemsSource property programmatically?

This is the XAML code;

<toolkit:AutoCompleteBox x:Name="newTaskNameTextBox"
                         ItemsSource="{StaticResource BankNamesList}" />

How to assign this ItemSourceattribute newTaskNameTextBoxto C # programmatically?

+2
source share
3 answers

(solution for WPF)

You must use the TryFindResource method .

newTaskNameTextBox.ItemsSource = 
    (IEnumerable)newTaskNameTextBox.TryFindResource("BankNamesList");

It searches for a logical tree, in the same way {StaticResource BankNamesList}does.


UPDATE: (solution for WP8)

It sounds like you are using WP8 (which does not include FindResource/ TryFindResource), so try this instead:

newTaskNameTextBox.ItemsSource = (IEnumerable)Resources["BankNamesList"];

UPDATE: (how to implement the missing TryFindResource file)

, (, ). , . , , , , MainWindow. WPF TryFindResouces, ( ):

public static class FrameworkElementExtensions
{
    public static object TryFindResource(this FrameworkElement element, object resourceKey)
    {
        var currentElement = element;

        while (currentElement != null)
        {
            var resource = currentElement.Resources[resourceKey];
            if (resource != null)
            {
                return resource;
            }

            currentElement = currentElement.Parent as FrameworkElement;
        }

        return Application.Current.Resources[resourceKey];
    }
}

/**********************************************************************/
// Or, the recursive version of TryFindResource method as suggested by @Default:

public static object TryFindResource(this FrameworkElement element, object resourceKey)
{
    if (element == null)
        return Application.Current.Resources[resourceKey];

    var resource = element.Resources[resourceKey];
    if (resource != null)
    {
        return resource;
    }
    return TryFindResource(element.Parent, resourceKey);
}

, FrameworkElementExtensions , ( , WPF ):

newTaskNameTextBox.ItemsSource = 
    (IEnumerable)newTaskNameTextBox.TryFindResource("BankNamesList");
+4

BankNamesList , , :

newTaskNameTextBox.ItemsSource = Resources["BankNamesList"]
0

:

newTaskNameTextBox.ItemsSource = (IEnumerable)(Application.Current.Resources["BankNamesList"]);
0
source

All Articles