Как установить объект кода в качестве источника данных для ComboBox, используя XAML? - PullRequest
0 голосов
/ 24 сентября 2010

На этой неделе я начал новую работу и пытаюсь разобраться в этом материале WPF.

Я дошел до того, что я пытаюсь добавить ComboBox в UserControl и заполнить его из коллекции, которая существует в коде.

Большую часть времени я неплохо разбирался в программировании «monkey-see-monkey-do»; копирование и адаптация существующего кода, чтобы заставить работать следующий этап, но этот материал DataSource поставил меня в тупик. Этим утром я прочитал целую кучу статей на MSDN и не ближе к пониманию, чем когда начинал.

Позвольте мне пройтись по нескольким вещам, которые мешают мне, и, надеюсь, вы, ребята, сможете указать мне правильное направление:

1) Ни один из файлов [UserControlName] .vb не содержит никакого кода. Весь код для UserControls сохраняется в файлах [UserControlName] Model.vb, а затем используется код следующего вида:

<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:l="clr-namespace:MySolution"
x:Class="UserControlName"
<UserControl.Resources>
    <l:UserControlNameModel x:Key="UserControlNameModelDataSource" />
</UserControl.Resources>
<UserControl>

Понятия не имею, почему это сделано. Идеи?

1.5) (использование маркеров означает, что я не могу использовать <> скобки или блоки кода позже. Какого черта, уценка?) В любом случае ...

2) Я почти уверен, что на данный момент мне нужен только статический источник, поскольку элементы в ComboBox не будут меняться во время выполнения, в настоящее время. Проблема в том, что все статьи, которые я могу найти об этом, являются гигантскими, сложными вещами о создании читателей XML, заполнении DataGridView и сортировке данных, и так далее, и тому подобное. Я просто хочу заявить, что я использую список frealing! Список, который я уже создал в коде.

Итак, да, мне в основном нужно использовать Public Property ComboBoxLines As List(Of String) из класса, который не совпадает с самим классом UserControl и DataSource для ComboBox.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 24 сентября 2010

1) XAML - это просто графы объектов, сериализованные в XML, с некоторыми взбитыми сливками и вишнями сверху. Поэтому при десериализации xaml создается новый экземпляр UserControlNameModel, который добавляется в коллекцию ресурсов UserControl под ключом UserControlblahblah. Это альтернатива делать это в codebehind и не служит никакой особой цели ... кроме как избегать codebehind, что я тоже люблю делать.

То, почему кодовое поле пустое и все определено в файле [control nmae] Model.vb, объясняется тем, что тот, кто написал это, использует шаблон M-V-VM. Его MVC для WPF (MVC настроен для доброго связывания WPF). Если вы не знаете или не понимаете MVVM, просто найдите его. Тонны информации там. Кроме того, codebehind это зло. Eeevil .

2) Достаточно просто (извините, код C # впереди):

// a static class that defines combo box values for user control x lol kthx
public static class ComboBoxLines
{  
  public static string[] Values = new string[]{ "One", "Two", "Three" };
}

в xaml:

<ComboBox 
  xmlns:src="clr-namespace:Where.ComboBoxLines.IsDefined"
  ItemsSource="{x:Static src:ComboBoxLines.Values}" />

Это статический способ сделать это. Конечно, вы также можете использовать экземпляр или определить список в файле [lol] Model.vb и просто привязать к нему ...

1 голос
/ 24 сентября 2010

В вашем сообщении много запросов.но позвольте мне заняться самым бесом.Чтобы привязать к объекту кода, используйте ObjectDataSource.Выполните шаги, подобные этой статье:

http://dotnetslackers.com/articles/wpf/Data-binding-to-CLR-objects-in-WPF.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...