2013-05-28 3 views
0

Не какой-то конкретный кодовый вопрос, я просто хочу лучше понять, как работает привязка данных в DataTemplate. Вот пример блока кода; Я определил Client класс с тремя атрибутами (цель этих атрибутов не имеет никакого отношения к вопросу)WPF, Datatemplates и привязка данных

public class Client 
{ 
    public bool Powered { get; set; } 
    public bool clientAlive { get; set; } 
    public bool updaterAlive { get; set; } 
} 

Я заселить ListView используя список клиентов:

List<Client> clientList = new List<Client>(); 
//populate the list from JSON url, code omitted 
listView1.ItemsSource = clientList; 

А вот блок XAML-код, который содержит шаблон для отображения элементов в ListView:

<ListView.ItemTemplate> 
    <DataTemplate> 
     <WrapPanel> 
      <TextBlock Text="Powered: " FontWeight="Bold" /> 
      <TextBlock Text="{Binding Powered}" /> 
      <TextBlock Text=", " /> 
      <TextBlock Text="clientAlive: " FontWeight="Bold" /> 
      <TextBlock Text="{Binding clientAlive}" /> 
      <TextBlock Text=", " /> 
      <TextBlock Text="updaterAlive: " FontWeight="Bold" /> 
      <TextBlock Text="{Binding updaterAlive}" /> 
     </WrapPanel> 
    </DataTemplate> 
</ListView.ItemTemplate> 

код работает нормально, и все, показывает, как ожидается, Мне просто интересно, может ли кто-нибудь объяснить, как работает привязка данных в WPF. Насколько мне известно, в XAML нет ничего, что ссылалось бы на класс Client, и я просто смущен тем, как XAML знает, как отобразить свойство, которое указывает привязка. Text = "{Binding = Powered}" просто ищет атрибут, соответствующий привязке в типе элемента, который заполняет список?

+0

Этот сайт посвящен вопросам и ответам. Лучше сформулировать его скорее как ответный вопрос. см. http://stackoverflow.com/faq#dontask – IvanH

ответ

1

Есть ли текст = "{Binding = Powered}" просто найдите атрибут, соответствующий привязке в типе элемента, который заполняет список?

В принципе, да. Если в элементе, в котором вы заполняли список, не было этого атрибута, вы увидите ошибки привязки (посмотрите в консоли при отладке).

Вы также можете указать тип DataTemplate, который позволит вам иметь несколько шаблонов, которые будут применяться в зависимости от конкретного типа объекта в вашей коллекции.

0

Когда коллекция будет привязана к списку, каждый контейнер элемента списка будет создан с Контентом, установленным для объекта Клиент. Таким образом, визуальное представление внутри шаблона данных имеет объект Client в качестве контекста данных.

Линия «{Binding Powered]» будет искать файл данных и найти свойство «Powered» и решить его значение. Просто удалите слово «Powered» и оставьте его как «{Binding}», WPF отобразит полное имя вашего объекта datacontext.

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