2009-11-20 6 views
0

Я использую статический массив объектов, определенных в XAML, в качестве источника ItemsSource в списке.Нужны данные Mock XAML во время разработки

Я использую:

ItemsSource="{Binding Source={StaticResource theSource}}". 

Это прекрасно работает во время разработки. Тем не менее, мне нужно переопределить это во время выполнения, поэтому в поле списка будут отображены его элементы из свойства коллекции в моей модели представления. Я выставил свойство, названное «theSource», и установил Window DataContext в код позади. Тем не менее, список все еще привязан к статическому ресурсу ... не к свойству в моей модели представления.

Любое предложение о правильном способе получения данных о времени разработки для визуализации пользовательского интерфейса и замены живых данных во время выполнения?

+0

Исправлено и выполнено мой ответ –

ответ

0

Просто назовите свой контроль Listbox

<ListBox x:Name="myListBox" 
ItemsSource="{Binding Source={StaticResource theSource}}" /> 

и изменить его во время выполнения

myListBox.ItemsSource = datasource; 

Второе взятие на эту проблему:

What's the difference between StaticResource and DynamicResource in WPF?

Если вы используете WPF, тогда вместо этого вы можете использовать DynamicResource и изменить определение этого во время выполнения.

Это не сработает с Silverlight, потому что эта более легкая структура не поддерживает динамические ресурсы.


Третий принять

Поскольку вы хотите использовать привязку к объекту контроллера, а затем:

<Page xmlns="http://..." xmlns:your="..."> 
<Page.DataContext> 
    <your:DesignTimeObject> <!-- Must be of the same type as in runtime, or at least expose properties and subproperties with the same name --> 
    <your:DesignTimeObject.List> 
    <your:Element id="1" /> 
    <your:Element id="2" /> 
    <!-- snip --> 
    <your:DesignTimeObject.List> 
    </your:DesignTimeObject> 
</Page.DataContext> 
<ListBox x:Name="myListBox" ItemsSource="{Binding List}" /> <!-- Binds to the Element list with id="1" , id="2" ... --> 
</Page> 

С таким образом, вы не должны изменить ваши привязки во время выполнения, установите DataContext один раз и сделайте с ним.

+0

Да, я полагаю, что это сработает, но я пытаюсь следовать принципам model-view-viewmodel. Итак, я хотел бы просто установить контекст данных окна и разрешить привязку WPF к данным во время выполнения. Спасибо за предложение. – thrag

+0

Ваш третий прием определенно поставил меня на правильный путь. Я использовал небольшую вариацию, чтобы объявить DataContext как массив моего объекта CLR, а ItemSource = {Binding} Это делает именно то, что мне нужно. Спасибо. – thrag

+0

Занимает ли 3 ресурса затрат во время выполнения? –

Смежные вопросы