2013-06-11 3 views
0

Im совершенно новый для WPF, так что это может быть простой вопрос.WPF - выделите одну строку в ListBox

У меня есть ListBox с определенным стилем, шрифтом и всем остальным материалом. Я хочу выделить одну строку там, но проблема в том, что все строки добавляются программно, поэтому я не могу просто изменить свойства строки и изменить, например, переднего плана (этого будет достаточно). Я знаю идентификатор целевой строки, но я не могу найти способ доступа к его объекту ListItemBox. Для доступа к конкретному элементу, который я использовал:

((MyClass)(Playlist.Items[i])).MyProperty = 0; //Access the i element of ListBox named Playlist 

Возможно ли это? Я искал решения здесь и на других сайтах, но ничего не помогает в моем случае.

Спасибо за любую помощь.

EDIT: Я не хочу выбирать строку, но менять цвет переднего плана.

+1

Создайте подходящую модель элемента данных для своих товаров и соответствующую 'DataTemplate' для' ListBoxItems'. –

+0

Я с @HighCore на этом. Если вы определяете определенный класс View Model для элементов в своем ListBox, и у вас есть ItemSource ListBox, связанный с коллекцией этих элементов, вы можете пройти через эту коллекцию, чтобы найти элемент, а класс элемента View Model может выставлять любые свойства это необходимо для поддержки привязок, в которых вы нуждаетесь. –

ответ

0

Дизайн Шаблон управления списком из SCRATCH с использованием Blend поможет вам изменить цвет переднего плана выбранного элемента в списке. Также Blend - прекрасный инструмент для дизайна интерфейса WPF, поэтому проверьте его.

+0

Я не хочу менять свойства выбранного элемента - я знаю, как это сделать. Мне нужно изменить свойство элемента, используя только его идентификатор. –

2

Вы можете использовать DataTemplate и DataTrigger. Ваш DataTemplate определяет, что вы хотите, чтобы каждый элемент в вашем списке выглядел (TextBlock, Image и т. Д.). DataTrigger будет отмечать конкретные условия данных для каждого элемента в вашем списке и соответствующим образом изменить стиль DataTemplate (например, цвет переднего плана). Это предполагает, что ваш ListBox привязан к коллекции MyClass с именем MyProperty.

<DataTemplate> 
    <TextBlock Text="{Binding MyProperty}"/> 
<DataTemplate.Triggers> 
    <DataTrigger Binding="{Binding Path=ID}"> 
     <DataTrigger.Value> 
      303216 
     </DataTrigger.Value> 
     <DataTrigger.Setters> 
     <Setter Property="Foreground" Value="Navy"/> 
     </DataTrigger.Setters> 
    </DataTrigger> 
</DataTemplate.Triggers> 

</DataTemplate> 

http://msdn.microsoft.com/en-us/library/system.windows.datatemplate.triggers.aspx

+0

@kittyPL - мог бы отметить этот ответ правильно, если он вам помог? – Darlene

0

Если вы не можете осуществить правильное решение MVVM для этого, вы можете получить ListBoxItem S от Items имущества ListBox. Если ListBox связан с данными (с использованием свойства ItemsSource), каждый из создаваемых автоматически ListBoxItem s будет иметь свой собственный объект DataContext, который будет принадлежать элементу коллекции, который привязан к свойству ItemsSource. Вы можете оценить его там. Однако я бы не рекомендовал этот подход. При необходимости используйте подходящее MVVM-решение.

var id = ...; 

var item = (from ListBoxItem i in ListBox1.Items 
      let data = (MyClass) i.DataContext 
      where data.Id == id 
      select i).FirstOrDefault(); 
if (item != null) 
    item.Foreground = Brushes.Red; 
Смежные вопросы