none
Как заставить ListViewItem выглядеть в соответствии с заданным DataTemplate? RRS feed

  • Вопрос

  • Добрый день! 

    Есть вот такой ListView: 

       <ListView Margin="5" Grid.ColumnSpan="2" x:Name="lv_Main" Visibility="Visible" SelectionMode="Single" SelectionChanged="lv_Main_SelectionChanged">
                <ListView.View>
                    <GridView AllowsColumnReorder="true" >
                        <GridViewColumn DisplayMemberBinding= "{Binding Path=ElemName}" Header="#Element"  />
                        <GridViewColumn DisplayMemberBinding= "{Binding Path=sHotkey}" Header="#Hotkey"/>
                        <GridViewColumn DisplayMemberBinding="{Binding Path=GPI}" Header="#GPI-event" />
                    </GridView>
                </ListView.View>
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <DockPanel HorizontalAlignment="Stretch">
                            <TextBlock Text="{Binding ElemName}" Grid.Column="1" FontWeight="Bold" HorizontalAlignment="Center" Width="45" DockPanel.Dock="Right" Foreground="{Binding ItemColor}" TextAlignment="Right"/>
                            <TextBlock Text="{Binding sHotkey}"  Grid.Column="2" HorizontalAlignment="Center" Width="45" DockPanel.Dock="Right" Foreground="{Binding ItemColor}" TextAlignment="Right"/>
                            <TextBlock Text="{Binding GPI}" Grid.Column="3" HorizontalAlignment="Center" Width="45" DockPanel.Dock="Right" Foreground="{Binding ItemColor}" TextAlignment="Right"/>
                        </DockPanel>
                    </DataTemplate>
                </ListView.ItemTemplate>
    
            </ListView>


    и есть класс, который я кладу в лист и задаю этот лист как ItemsSource для указанного ListView:

      class cl_LVItem_HG: INotifyPropertyChanged
            {
                string _ElemName = "";
                public string ElemName { get { return _ElemName; } set { _ElemName = value; NotifyPropertyChanged("ElemName"); } }
                string _Hotkey = "";
                string _GPI = "";
                public string sHotkey { get { return _Hotkey; } set { _Hotkey = value; PsClick.Hotkey.sKeys = value; NotifyPropertyChanged("Hotkey"); } }
                public string GPI { get { return _GPI; } set { _GPI = value; PsClick.GPIName = value; NotifyPropertyChanged("GPI"); } }
                Brush _ItemColor = Brushes.Red;
                public Brush ItemColor { get { return _ItemColor; } set { _ItemColor = value; NotifyPropertyChanged("ItemColor"); } }
                public event PropertyChangedEventHandler PropertyChanged;
                private void NotifyPropertyChanged(string propName)
                {
                    if (PropertyChanged != null)
                    { PropertyChanged(this, new PropertyChangedEventArgs(propName)); }
                }
                public cl_LVItem_HG() : base() { ItemColor = Brushes.Azure; }
    
            }

    ....

            List<cl_LVItem_HG> lv_Coll = new List<cl_LVItem_HG>();

    /// заполняем лист

           lv_Main.ItemsSource = lv_Coll;

    И вот итог - то, что я писал в DataTemplate, вообще проигнорировано. Столбцы в ЛистВью есть, текст в них тоже, но он одинаково черный, не зависит от ItemColor, колонка ElemName жирным не выделена. Почему?

    Заранее спасибо.

    10 марта 2015 г. 10:42

Ответы

Все ответы

  • Добрый день.

    Вы определитесь, вам шашечки или ехать. Если вы используете столбцы, то для изменения способа отображения воспользуйтесь CellTemplate. Ну а если столбцы не используете, то тогда ItemTemplate вам в помощь.

    Вот здесь можете посмотреть пример на CellTemplate.

    10 марта 2015 г. 11:32
    Отвечающий
  • Столбцы мне менять не надо. Мне нужно, чтобы строки имели цвет, какой я захочу. Ну и прочие параметры хотелось бы менять - выравнивание, жирность текста и проч. Хотя это необязательно, важен цвет строк.

    Для этого у меня проперти ItemColor есть, оно теоретически должно биндиться в Foreground строки в ListView. Собсно, этого я и добиваюсь.

    10 марта 2015 г. 11:36
  • Коллега, цвет строк делается не так. Вот:

    • Помечено в качестве ответа SvarogichRed 10 марта 2015 г. 12:03
    10 марта 2015 г. 11:48
    Отвечающий
  • Спасибо, Алексей!

    А я в темплейты упёрся... Благодарю от всей души!

    10 марта 2015 г. 12:03
  • Пожалуйста. Будут вопросы, обращайтесь, постараемся помочь.


    10 марта 2015 г. 12:05
    Отвечающий