Изменить цвет фона ListViewItem при заполнении - PullRequest
0 голосов
/ 13 декабря 2011

это разрывает мне волосы,

У меня есть просмотр списка

<ListView Canvas.Left="1045"  Canvas.Top="667"  FontSize="25" ItemsSource="{Binding Items}"   FontFamily="Gill Sans MT" Height="173" Name="lvContact" Width="536" SelectionChanged="lvContact_SelectionChanged">

В моем коде позади я динамически добавляю элемент в список

public void UpdateContactList(Hashtable contactList)
{
    this.lvContact.Items.Clear();

    SortedDictionary<string,string> sortedContactList = new SortedDictionary<string,string>();


    foreach (DictionaryEntry de in contactList)
    {
        sortedContactList.Add(de.Key.ToString(), de.Value.ToString());
    }


    foreach (var de in sortedContactList)
    {
        System.Windows.Controls.ListViewItem contactItem = new System.Windows.Controls.ListViewItem();
        string contactItemString = de.Key.ToString();

        System.Windows.Controls.ListViewItem text = new System.Windows.Controls.ListViewItem();

        text.Content = contactItemString;
        if (de.Value == "NLN")
        {
            text.Background = Brushes.Green;
        }
        else
        {
            text.Background = Brushes.Gray;
        }
        lvContact.Items.Add(text);
    }
}

Однако цвет фона никогда не меняется, а список не обновляется.

Есть идеи, почему?Большое спасибо

1 Ответ

1 голос
/ 13 декабря 2011

ListViews могут быть привязаны к ItemsSource, или вы можете указать ListView.Items вручную.Вы не можете иметь оба.

Ваше определение ListView связывает ваше ListView.ItemsSource, поэтому вы не можете вручную указать ListView.Items.

Так как ваш ItemsSource связан со свойством Items, тогдаЯ бы предположил, что у вас есть List<T> или ObservableCollection<T> где-то с именем Items с элементами для вашего ListView.Чтобы изменить элементы ListView, вы должны изменить эту коллекцию.

Чтобы изменить цвет фона на основе значения, я бы использовал DataTrigger.Это позволит вам сохранить привязку ItemsSource и отделить ваши данные от вашего пользовательского интерфейса.

<Style TargetType="{x:Type ListViewItem}">
    <Setter Property="Background" Value="Gray" />
    <Style.Triggers>
        <DataTrigger Binding="{Binding Value}" Value="NLN">
            <Setter Property="Background" Value="Green" />
        </DataTriggers>
    </Style.Triggers>
</Style>
...