Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / DataGrid + SelectedIndex / 4 сообщений из 4, страница 1 из 1
02.05.2010, 21:54
    #36609242
Crossificio
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + SelectedIndex
Хочется сделать нечто похожее на bindingNavigator в WinForms, но только в WPF.
Хочу чтоб текстбокс отображал позицию выделенного элемента так например "7 из 990", где
7 -текущая позиция, 990 - общее количество элементов. Но также была бы возможность ввести в текстбокс число и перейти к соответствующему элементу в гриде, но в текстбоксе снова отобразить "6 из 990" например, если вводили 6. Как такое можно сделать?
Сейчас имею:
Код: plaintext
1.
<TextBox Width="50" Text="{Binding ElementName=dataGrid1, Path=SelectedIndex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></TextBox>


НО так как индексация начинается с 0 в гриде, то хотелось бы более человеческий вид и чтоб первой записи в гриде соответствовал индекс 1 в текстбоксе, а не 0.

Понимаю что скорее всего нужно написать собственный конвертер, но что-то пока никак не могу сообразить как именно его написать. WPF только изучаю.
Спасибо.
...
Рейтинг: 0 / 0
02.05.2010, 22:31
    #36609267
Crossificio
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + SelectedIndex
пока смог накидать вот такой код и проблема с отсчётом индексов с нуля вроде как решена:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
[ValueConversion(typeof(int), typeof(string))]
class DataGridSelectedIndexToStringConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        int index = (int)value;
        return (++index).ToString();
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string strValue = value as string;
        int index;
        if (int.TryParse(strValue, out index))
        {
            return index;
        }
        else
        {
            return DependencyProperty.UnsetValue;
        }
    }
}

В ресурсы окна добавил:
Код: plaintext
1.
<my:DataGridSelectedIndexToStringConverter x:Key="DataGridSelectedIndexToStringConverter" />
Привязку изменил так:
Код: plaintext
1.
  <TextBox Width="50" Text="{Binding ElementName=dataGrid1, Path=SelectedIndex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource DataGridSelectedIndexToStringConverter}}"></TextBox>

Но теперь хотелось бы понять каким образом сформировать строку "7 из 990" для отображения в текстбоксе, а также каким образом переводить датагрид на установленный из текстбокса элемент?
...
Рейтинг: 0 / 0
03.05.2010, 19:03
    #36609838
Crossificio
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + SelectedIndex
Разобрался нужно было унаследоваться от IMultiValueConverter.
Остаётся решить проблему каким образом проскроллировать DataGrid так, чтобы видимым становился выбранный элемент. Каким образом решается?
...
Рейтинг: 0 / 0
04.05.2010, 00:07
    #36610056
Crossificio
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + SelectedIndex
решил проблему полностью... скроллировать грид нужно с помощью метода ScrollIntoView
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / DataGrid + SelectedIndex / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]