С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
Casper-SC
Эксперт .NET
3638 / 1843 / 360
Регистрация: 27.03.2010
Сообщений: 5,166
Записей в блоге: 1
1

ListView: добавить картинку в каждый ListViewItem

03.01.2011, 05:52. Просмотров 3768. Ответов 24
Метки нет (Все метки)

Здравствуйте. Вот у меня есть WPF окно, на нём ListView:
XAML код главного окна (клик, чтобы развернуть - это не ссылка)
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<Window x:Class="WpfApplication_Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
    <Grid>
        <ListView Margin="12" Name="listView" MouseDoubleClick="listView_MouseDoubleClick">
            <ListView.View>
                <GridView>
                    <GridView.Columns>
                        <GridViewColumn Header="" Width="30"  DisplayMemberBinding="{Binding IsEnabled}"/>
                        <GridViewColumn Header="Первое текстовое поле" Width="200"  DisplayMemberBinding="{Binding TextValueOne}"/>
                        <GridViewColumn Header="Второе текстовое поле" Width="200" DisplayMemberBinding="{Binding TextValueTwo}"/>
                    </GridView.Columns>
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>


Есть класс объекты которого я добавляю в ListView. У этого класса есть свойство IsEnabled.
Код класса (клик, чтобы развернуть - это не ссылка)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    class SomeObject
    {
        String textValueOne;
        String textValueTwo;
 
        public String TextValueOne { get { return textValueOne; } }
        public String TextValueTwo { get { return textValueTwo; } }
 
        public Boolean IsEnabled { get; set; }
 
        public SomeObject(String TextValueOne, String TextValueTwo)
        {
            this.textValueOne = TextValueOne;
            this.textValueTwo = TextValueTwo;
            this.IsEnabled = true;
        }
    }


Вот код главного окна:
Код главного окна (клик, чтобы развернуть - это не ссылка)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
 
namespace WpfApplication_Test
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            ObservableCollection<SomeObject> someObjects = new ObservableCollection<SomeObject>();
            for (int i = 0; i < 5; i++)
            {
                SomeObject so = new SomeObject(
                    String.Format("Основоной текст - {0}", i), 
                    String.Format("Другой текст - {0}", i));
                someObjects.Add(so);
            }
            this.listView.ItemsSource = someObjects;
        }
 
        private void listView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            SomeObject selectedSomeObject = ((SomeObject)this.listView.SelectedValue);
            selectedSomeObject.IsEnabled = !selectedSomeObject.IsEnabled;
 
            String msgText = String.Format(
                "Изменилось значение свойства IsEnabled на \"{0}\" у объекта значением первого текстового поля: \"{1}\"",
                selectedSomeObject.IsEnabled, selectedSomeObject.TextValueOne);
            MessageBox.Show(msgText);
        }
    }
}


Запускаю проект, когда жму дабл клик по любому выделеному элементу в списке, то на экран выводится сообщение показывающее на какое значение изменилось свойство IsEnabled и у какого элемента в списке. Это всё для наглядности.

Вот меня интересует, как мне сделать так, чтобы Каждый ListViewItem мог отображать графически значение свойства IsEnabled. Например красный кружок, значит IsEnabled == false, зелёный значит true.


Вот примерно, что я хочу получить в итоге:
~52 килобайта

Приложил тестовый проект к сообщению. Вдруг, кто-то всё-таки решит помочь, а самому делать пример лень, то вот готовый прикреплён (WPF проект для Visual Studio 2010)
1
Вложения
Тип файла: rar WpfApplication_Test.rar (33.1 Кб, 25 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2011, 05:52
Ответы с готовыми решениями:

В обработчике события PreviewMouseLeftButtonDown для ListView получить ListViewItem
Дело в том, что ListViewItem может иметь произвольный стиль или шаблон. У меня...

ListView не реагирует на изменение ListViewItem.ListViewSubItem.text
Здравствуйте, такая проблема: есть метод делегата, который получает данные из...

Шаблон для ListView. Изменить внешний вид ColumHeader. Изменить внешний вид ListViewItem'ов. Подробности, код, скриншоты внутри...
Здравствуйте. Есть ListView, я к нему делаю шаблон. И появилось несколько...

Загрузить в Image выбранную картинку в ListView
Народ, помогите пожалуйта. Не могу заставить Image отображать выбранную в...

Добавить записи в ListView
Здравствуйте! Проблема заключается в том, что мне нужно добавить строки в...

24
Unril
790 / 681 / 109
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
03.01.2011, 13:01 2
Тебе нужно написать класс конвертера булевого значения в нужный объект. К примеру:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public class BoolToColorConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var mySolidColorBrush = new SolidColorBrush();
            mySolidColorBrush.Color = (bool)value ? Color.FromRgb(0, 0, 250) : Color.FromRgb(250, 0, 0);
            return mySolidColorBrush;
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return value;
        }
    }
Потом куда нужно вставляем прямоугольник и связываем его с полем через конвертер:
XML
1
<Rectangle Fill="{Binding Path=IsEnable, Converter={StaticResource BoolConverter}}" Width="20" Height="20" />
Полный код

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Globalization;
using System.Windows;
using System.Windows.Data;
using System.Windows.Media;
 
namespace WpfApplicationTest
{
    public partial class MainWindow : Window
    {
        private readonly MyVals myVals;
 
        public MainWindow()
        {
            InitializeComponent();
            myVals = new MyVals();
            grid.DataContext = myVals;
        }
    }
 
    public class MyVals : ObservableCollection<MyVal>
    {
        public MyVals()
        {
            Add(new MyVal {Name = "val1", IsEnable = true});
            Add(new MyVal {Name = "val2", IsEnable = false});
            Add(new MyVal {Name = "val3", IsEnable = false});
            Add(new MyVal {Name = "val4", IsEnable = true});
        }
    }
 
    public class MyVal : INotifyPropertyChanged
    {
        private bool isEnable;
        private string name;
 
        public string Name
        {
            get { return name; }
            set
            {
                name = value;
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("Name"));
                }
            }
        }
 
        public bool IsEnable
        {
            get { return isEnable; }
            set
            {
                isEnable = value;
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("IsEnable"));
                }
            }
        }
 
        #region INotifyPropertyChanged Members
 
        public event PropertyChangedEventHandler PropertyChanged;
 
        #endregion
    }
 
    public class BoolToColorConverter : IValueConverter
    {
        #region IValueConverter Members
 
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            SolidColorBrush mySolidColorBrush = new SolidColorBrush();
            mySolidColorBrush.Color = (bool)value ? Color.FromRgb(0, 0, 250) : Color.FromRgb(250, 0, 0);
            return mySolidColorBrush;
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return value;
        }
 
        #endregion
    }
}
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<Window x:Class="WpfApplicationTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Local="clr-namespace:WpfApplicationTest" Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <Local:MyVals x:Key="MyValsData" />
        <Local:BoolToColorConverter x:Key="BoolConverter" />
    </Window.Resources>
    <Grid Name="grid" DataContext="{Binding Source={StaticResource MyValsData}}">
        <ListBox Height="198" HorizontalAlignment="Left" Margin="12,12,0,0" VerticalAlignment="Top" Width="241" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Rectangle Fill="{Binding Path=IsEnable, Converter={StaticResource BoolConverter}}" Width="20" Height="20" />
                        <Label Content="{Binding Path=Name}" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Window>
1
Casper-SC
Эксперт .NET
3638 / 1843 / 360
Регистрация: 27.03.2010
Сообщений: 5,166
Записей в блоге: 1
03.01.2011, 17:24  [ТС] 3
Только мне не ListBox нужен. Мне нужен ListView и именно с столбцами. То есть как минимум 3 столбца не относящиеся к картинке, что будет вначале. Нет ну может там нету особой разницы, чуть позже попробую сделать.

Добавлено через 33 минуты
Так вот вопрос в том, как мне добавлять в ListViewItem в качестве первой колонки картинку? Я этого никак не пойму. Мне в результате нужно, то что я в первом сообщении показал на скриншоте.
0
kenny69
burning1ife
1413 / 1235 / 292
Регистрация: 21.09.2008
Сообщений: 3,409
Записей в блоге: 9
04.01.2011, 11:11 4
XML
1
2
3
4
5
6
7
<DataTemplate>
        <StackPanel Orientation="Horizontal">
            <Image Source="{Binding Path=IsEnabled, Converter={StaticResource BoolToPathConverter}}" />
            <Label Content="{Binding Path=field1}" />            
            <Label Content="{Binding Path=field2}" />
        </StackPanel>
</DataTemplate>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public class BoolToPathConverter : IValueConverter
    {
        static string path1;//путь к первой картинке
        static string path2;//путь ко второй картинке
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return (bool)value ? path1 : path2;
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return (string)value == path1 ? true : false;
        }    
    }
1
Casper-SC
Эксперт .NET
3638 / 1843 / 360
Регистрация: 27.03.2010
Сообщений: 5,166
Записей в блоге: 1
04.01.2011, 13:06  [ТС] 5
Что-то ничего не получается. Может я не так делаю... И Converter={StaticResource BoolToPathConverter} подчёркивается и появляется надпись: Не удалось установить ресурс: "BoolToPathConverter"

XAML код окна и C# код того же окна
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<Window x:Class="WpfApplication_Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
    <Grid>
        <ListView Margin="12" Name="listView" MouseDoubleClick="listView_MouseDoubleClick">
            <ListView.View>
                <GridView>
                    <GridView.Columns>
                        <GridViewColumn Header="" Width="30" DisplayMemberBinding="{Binding IsEnabled}" />
                        <GridViewColumn Header="Первое текстовое поле" Width="200"  DisplayMemberBinding="{Binding TextValueOne}"/>
                        <GridViewColumn Header="Второе текстовое поле" Width="200" DisplayMemberBinding="{Binding TextValueTwo}"/>
                    </GridView.Columns>
                </GridView>
            </ListView.View>
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Image Source="{Binding Path=IsEnabled, Converter={StaticResource BoolToPathConverter}}" />
                        <Label Content="{Binding Path=field1}" />
                        <Label Content="{Binding Path=field2}" />
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </Grid>
</Window>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using System.Globalization;
 
namespace WpfApplication_Test
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            ObservableCollection<SomeObject> someObjects = new ObservableCollection<SomeObject>();
            for (int i = 0; i < 5; i++)
            {
                SomeObject so = new SomeObject(
                    String.Format("Основоной текст - {0}", i), 
                    String.Format("Другой текст - {0}", i));
                someObjects.Add(so);
            }
            this.listView.ItemsSource = someObjects;
        }
 
        private void listView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            SomeObject selectedSomeObject = ((SomeObject)this.listView.SelectedValue);
            selectedSomeObject.IsEnabled = !selectedSomeObject.IsEnabled;
 
            String msgText = String.Format(
                "Изменилось значение свойства IsEnabled на \"{0}\" у объекта значением первого текстового поля: \"{1}\"",
                selectedSomeObject.IsEnabled, selectedSomeObject.TextValueOne);
            MessageBox.Show(msgText);
        }
    }
 
    public class BoolToPathConverter : IValueConverter
    {
        static Uri path1 = new Uri(@"pack://application:,,,/Resources/imgTrue.png", UriKind.Absolute);//путь к первой картинке
        static Uri path2 = new Uri(@"pack://application:,,,/Resources/imgFalse.png", UriKind.Absolute);//путь ко второй картинке
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return (bool)value ? path1 : path2;
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return (Uri)value == path1 ? true : false;
        }
    }
}


Класс объекта из которого составляется список в ListView

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Data;
using System.Globalization;
 
namespace WpfApplication_Test
{
    class SomeObject
    {
        String textValueOne;
        String textValueTwo;
 
        public String TextValueOne { get { return textValueOne; } }
        public String TextValueTwo { get { return textValueTwo; } }
 
        public Boolean IsEnabled { get; set; }
 
        public SomeObject(String TextValueOne, String TextValueTwo)
        {
            this.textValueOne = TextValueOne;
            this.textValueTwo = TextValueTwo;
            this.IsEnabled = true;
        }
    }
}


Прикрепил опять же на всякий случай проект, который содержит ListView и картинки, но не работает ничего. Это обновленный проект, не тотже, что в первом сообщении.
0
Вложения
Тип файла: rar WpfApplication_Test.rar (30.2 Кб, 18 просмотров)
kenny69
burning1ife
1413 / 1235 / 292
Регистрация: 21.09.2008
Сообщений: 3,409
Записей в блоге: 9
04.01.2011, 16:23 6
Лови!
1
Вложения
Тип файла: rar WpfApplication_Test.rar (45.7 Кб, 85 просмотров)
Casper-SC
Эксперт .NET
3638 / 1843 / 360
Регистрация: 27.03.2010
Сообщений: 5,166
Записей в блоге: 1
04.01.2011, 21:45  [ТС] 7
Спасибо!
Вот что ещё хотел спросить. Как можно ещё ограничить высоту каждого ListViewItem'a? Чтобы было как в WinForms, там же в ListView каждый ListViewItem имел фиксированную высоту. А то, если добавить текст из RichTextBox в ListViewItem, то это самый ListViewItem становится огромным просто. Или если в этом примере растянуть первый GridViewColumn который содержит картинку, то получается, что все они становятся просто огромными: .

Добавлено через 12 минут
Вот переделал, так как мне изначально было нужно:
XAML код
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<Window x:Class="WpfApplication_Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:self="clr-namespace:WpfApplication_Test"
        Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
    <Window.Resources>
        <self:BoolToPathConverter x:Key="BoolToPathConverter"></self:BoolToPathConverter>
    </Window.Resources>
    <Grid>
        <ListView Margin="12" Name="listView" MouseDoubleClick="listView_MouseDoubleClick" SelectionMode="Single">
            <ListView.View>
                <GridView>
                    <GridView.Columns>
                        <GridViewColumn Header="Первое текстовое поле" Width="200" >
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <StackPanel Orientation="Horizontal">
                                        <Image Source="{Binding IsEnabled, Converter={StaticResource BoolToPathConverter}}"></Image>
                                        <TextBlock Margin="15,0,0,0" Text="{Binding TextValueOne}"></TextBlock>
                                    </StackPanel>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                        <GridViewColumn Header="Второе текстовое поле" Width="200" DisplayMemberBinding="{Binding TextValueTwo}"/>
                    </GridView.Columns>
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>



Но это не решение проблемы. Нужно именно, как-то ограничивать высоту каждого ListViewItem.
0
kenny69
burning1ife
1413 / 1235 / 292
Регистрация: 21.09.2008
Сообщений: 3,409
Записей в блоге: 9
05.01.2011, 00:34 8
Height="30"
XML
1
2
3
4
    <StackPanel Height="30" Orientation="Horizontal">
                                        <Image Source="{Binding IsEnabled, Converter={StaticResource BoolToPathConverter}}"></Image>
                                        <TextBlock Margin="15,0,0,0" Text="{Binding TextValueOne}"></TextBlock>
                                    </StackPanel>
1
Casper-SC
Эксперт .NET
3638 / 1843 / 360
Регистрация: 27.03.2010
Сообщений: 5,166
Записей в блоге: 1
05.01.2011, 00:52  [ТС] 9
Цитата Сообщение от kenny69 Посмотреть сообщение
Height="30"
Да уж =). Как я сам не догадался так сделать. Спасибо огромное, теперь наконец-то я сделал то, чего очень долго не мог сделать. Наконец-то разобрался с этим ListView'ом.
0
DimonR91
13 / 13 / 1
Регистрация: 06.05.2011
Сообщений: 56
28.03.2012, 01:36 10
Я пытаюсь вывести в ListViewItem картинку - иконку процесса( т.е. как в диспетчере задач ).
Получаю адрес файла .exe процесса. По нему получаю объект Icon процесса.
Это я все делаю в конвертере.
Как эту иконку можно дальше в ListView отобразить, не зная ее Uri ?
0
DimonR91
13 / 13 / 1
Регистрация: 06.05.2011
Сообщений: 56
02.04.2012, 21:34 11
Подскажите, пожалуйста, ак сделать, если мой конвертер возвращает объект Image?

И еще. Использовал проект (вылаженный выше), описал точно также функцию для конвертации.
XML
1
2
3
4
5
6
7
8
<Window x:Class="TaskManager.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:self="clr-namespace:TaskManager"
        Title="TaskManager" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" d:DesignHeight="418" d:DesignWidth="525" SizeToContent="WidthAndHeight" MinWidth="470" MinHeight="530">
    <Window.Resources>
        <self:BoolToPathConverter x:Key="BoolToPathConverter"></self:BoolToPathConverter>
    </Window.Resources>
Дизайнер ругается:

Undefined CLR namespace. The 'clr-namespace' URI refers to a namespace 'TaskManager' that is not included in the assembly. C:\Users\Dmitry\Documents\Visual Studio 2010\Projects\TaskManager\TaskManager\MainWindow.xaml 4 20

The type 'self:BoolToPathConverter' was not found. Verify that you are not missing an assembly reference and that all referenced assemblies have been built. C:\Users\Dmitry\Documents\Visual Studio 2010\Projects\TaskManager\TaskManager\MainWindow.xaml 7 10

Как исправить можно?
Мой namespace TaskManager по идее находится в этой сборке...
0
Вложения
Тип файла: rar TaskManager.rar (223.8 Кб, 12 просмотров)
DimonR91
13 / 13 / 1
Регистрация: 06.05.2011
Сообщений: 56
03.04.2012, 23:51 12
С проблемой с namespace разобрался (заново проект создал). Спасибо Casper-SC за помощь.
Вот исправленная версия проекта.

Еще возник вопрос насчет использование ListView. Так как я стандартной сортировки у него не нашел, то писал свой метод сортировки записей при нажатии на хедер колонки. Однако сортировка происходит медленно. Интерфейс подвисает. Кто-нибудь делал сортировку для ListView? Подскажите как сделать, пожалуйста.
0
Вложения
Тип файла: rar TaskManager.rar (92.4 Кб, 11 просмотров)
Casper-SC
Эксперт .NET
3638 / 1843 / 360
Регистрация: 27.03.2010
Сообщений: 5,166
Записей в блоге: 1
04.04.2012, 01:29  [ТС] 13
Короче заколебался я с работой в другом потоке, там вылетало исключение одно, я похоже понял почему, потому-что объекты ProcessInfo создаются в другом потоке (наверное)... Сделал другой вариант, пока в одном потоке.
1
Вложения
Тип файла: zip Wpf_ProcessList.zip (64.9 Кб, 15 просмотров)
Casper-SC
Эксперт .NET
3638 / 1843 / 360
Регистрация: 27.03.2010
Сообщений: 5,166
Записей в блоге: 1
04.04.2012, 01:30  [ТС] 14
Там в проекте есть коммент про коллекцию, не обращай внимание, я в этом проекте много раз менял методы, их названия и т.д. так как эксперементировал с работой в другом потоке. Но там картинки добавляются. Я сдела метод расширение для класса Bitmap. Проблема с конвертером была в том, что нельзя Bitmap из библиотеки System.Drawing.dll привести к типу Image из WPF, какой-то там библиотеки.
1
DimonR91
13 / 13 / 1
Регистрация: 06.05.2011
Сообщений: 56
04.04.2012, 01:46 15
Решил отказаться от конвертера...
Создал свой класс, в котором нужные мне св-ва (одно из них - изображение). То есть напрямую через биндинг хочу вывести картинку.

Как теперь вывести картинку?
0
Вложения
Тип файла: rar TaskManager.rar (92.2 Кб, 15 просмотров)
Casper-SC
Эксперт .NET
3638 / 1843 / 360
Регистрация: 27.03.2010
Сообщений: 5,166
Записей в блоге: 1
04.04.2012, 01:47  [ТС] 16
Я выше выложил проект, там всё есть.
0
DimonR91
13 / 13 / 1
Регистрация: 06.05.2011
Сообщений: 56
04.04.2012, 01:50 17
Да, спасибо) Просто интернет лагал, не видел появившихся ответов)
0
DimonR91
13 / 13 / 1
Регистрация: 06.05.2011
Сообщений: 56
08.04.2012, 17:20 18
Создал свой класс CApp, в котором создал свойства для биндинга.
Биндю их к ListView, однако вылетает исключение:
"Вызов конструктора для типа "TaskManager.MainWindow", удовлетворяющего указанным ограничениям привязки, привел к выдаче исключения.": номер строки "5" и позиция в строке "107".
Не могу понять в чем дело.
Сначала кстати все нормально выводилось... Потом перестало... Не особо вроде что-то менял.
Ошибка вылетает в функции void AppRefresh(), когда получаю список процессов и добавляю в коллекцию CApp.
0
Вложения
Тип файла: rar TaskManager.rar (93.5 Кб, 9 просмотров)
Casper-SC
Эксперт .NET
3638 / 1843 / 360
Регистрация: 27.03.2010
Сообщений: 5,166
Записей в блоге: 1
08.04.2012, 17:46  [ТС] 19
Во-первых, вынеси весь код из конструктора окна и больше туда ничего не пихай, всё делай в обработчике события Initialized или Loaded, так как в конструкторе окна вылетает исключение, оно оборачивается в XamlParseException, что несомненно неудобно для тестирования и нахождения ошибок.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        public MainWindow()
        {
            InitializeComponent();
        }
 
        // естественно в XAML надо на него подписаться, а не просто скопировать к себе
        // хотя проще из студии добавить обработчик через значок молнии в окне свойств нашего 
        // разрабатываемого окна.
        private void Window_Initialized(object sender, EventArgs e) 
        {
            ProcRefresh();
            AppRefresh();
            ServRefresh();
        }
После того как ты это сделаешь, то увидишь совсем другое исключение и совсем в другом месте.

Добавлено через 5 минут
Я сменил конечную платформу на x64 и заработало (на Any CPU тоже работает), хотя какое-то сомнительное решение. А может и необходимое для менеджера задач, так как вылетало исключение:
32-разрядные процессы не могут получить доступ к 64-разрядному процессу.
1
DimonR91
13 / 13 / 1
Регистрация: 06.05.2011
Сообщений: 56
08.04.2012, 18:38 20
Спасибо) А то я раньше всегда в конструктор пихал. думал нету разницы.

вот теперь я вспомнил, что я изменил) Сначала компилил под х64, потом сменил на х86.
Просто у меня винда 64 (у тебя тоже видимо?), когда пытался получить инфу о процессе 64-битном, была ошибка доступа. Погуглив, нашел решение только компилить мне 64.
Однако это не помогло( Если во вкладке процессов сделать двойной клик, появится инфа о процессе.Однако у меня всеравно вылезала ошибка доступа, хотя компилил под х64 и AnyCPU (
Может в вижле(Ultimate) у меня не хватает какого компонента...
проверь, пожалуйста, у тебя выводится инфа о процессе х64 (какой-нибудь системный).- в вкладке с процессами дабл клик по элементу списка
0
08.04.2012, 18:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2012, 18:38

Добавить флажки в ListView
Здравствуйте! Возникла проблема, никак не могу решить. Каким образом мне...

ListView - как добавить строку
Здравтсвуйте. Сейчас только начинаю изучение wpf и паттерна mvvm. Решил...

Как добавить строку в listView???
Xaml не предлагать....Заранее спасибо....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru