powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / в DataGrid не меняется Cursor
3 сообщений из 3, страница 1 из 1
в DataGrid не меняется Cursor
    #37972503
djanri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Суть проблемы в том, что не измененяется статус курсора в контекстном меню DataGrid. Т.е. когда нажимаешь на меню Открыть, выполняется команда открытия формы и в это время курсор на экране должен измениться на песочные часы (значение Wait). После выполнения команды курсор должен вернуться прежнее состояние.
Дело в том, что по всей форме свойство курсор срабатываем правильно и только в ContextМеню ничего не происходит.
Может кто знает в чем проблема?

есть UserConrol

Код: 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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
<UserControl x:Class="xxx.WayBillCollectionView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             MinWidth="600" MinHeight="300"
             xmlns:asm="clr-namespace:xxx.ControlTemplates;assembly=ControlTemplates"
	  Cursor="{Binding IsWaitCursor, Converter={asm:BoolToCursorConverter}, Mode=TwoWay}"
             >
    <UserControl.Resources>
        <!--наше контекстное меню-->
        <ContextMenu x:Key="WayBillCollectionContextMenu" Cursor="{Binding IsWaitCursor, Converter={asm:BoolToCursorConverter}, Mode=TwoWay}">
            <MenuItem Header="Открыть" Command="{Binding Path=OpenWayBillCommand}" />
        </ContextMenu>

        <!--помещаем в стиль -->
        <Style x:Key="WayBillCollectionDataGridRowStyle" TargetType="{x:Type DataGridRow}" BasedOn="{StaticResource DataGridRowStyle}">
            <Setter Property="ContextMenu" Value="{StaticResource WayBillCollectionContextMenu}" />
        </Style>
    </UserControl.Resources>
	
    <DockPanel >
        <!--cтиль помещаем в DataGrid -->
        <DataGrid  
            ItemsSource="{Binding Path=WayBillOrderViewModelCollection}" 
			SelectedItem="{Binding Path=SelectedWayBillViewModel}"
			Style="{StaticResource DataGridStyle}"
            RowStyle="{StaticResource WayBillCollectionDataGridRowStyle}"
			Cursor="{Binding IsWaitCursor, Converter={asm:BoolToCursorConverter}, Mode=TwoWay}"
            AutoGenerateColumns="False"
            CanUserDeleteRows="False"
            >


            <DataGrid.Columns>
                <DataGridTextColumn Header="Номер" Binding="{Binding Path=Number, Mode=OneWay}" CellStyle="{StaticResource DataGridCellStyleRight}"/>
                <DataGridTextColumn Header="Серия" Binding="{Binding Path=Series, Mode=OneWay}" />
                <DataGridTextColumn Header="Дата" Binding="{Binding Path=Date, Mode=OneWay, Converter={asm:DateFormattingConverter}}"  />
				<DataGridTextColumn Header="Код WayBill" Binding="{Binding Path=Id, Mode=OneWay}" 
					Visibility="{Binding IsAdmin, Converter={asm:BoolToVisibilityConverter}}"/>
                
            </DataGrid.Columns>

        </DataGrid>

    </DockPanel>
</UserControl>



и WayBillOrderViewModel с командой и методом:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public ICommand OpenWayBillCommand
        {
            get
            {
                return _openWayBillCommand ??
                    (_openWayBillCommand = new RelayCommand(p => OpenView()));
            }
        }

        /// <summary>
        /// открываем представление коллекции WayBillOrders
        /// </summary>
        public override void OpenView()
        {
            IsWaitCursor = true;
            base.OpenView();
            IsWaitCursor = false;
        }
...
Рейтинг: 0 / 0
в DataGrid не меняется Cursor
    #37972509
djanri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и ещё

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
        /// <summary>
        /// значение курсора - когда истина, то значение Wait, иначе Arrow (биндится к свойству Cursor в элементе управления)
        /// </summary>
        public bool IsWaitCursor
        {
            get { return App.MainWindowViewModel.IsWaitCursor; }
            set
            {
                App.MainWindowViewModel.IsWaitCursor = value;
                OnPropertyChanged("IsWaitCursor");
            }
        }
...
Рейтинг: 0 / 0
в DataGrid не меняется Cursor
    #37972676
djanri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Итак, решение найдено.
Проблема заключалась в том, что контекстное меню привязывалось к конкретному айтиму коллекции в DataGrid. В моем случае - к SelectedWayBillViewModel. Cooтветственно и команда биндилась к этой viewModel. А надо было сделать, что бы команда биндилась к
DataContext'у WayBillCollectionView. В итоге поменял код во View на:

Код: xml
1.
2.
3.
4.
5.
6.
<ContextMenu x:Key="WayBillCollectionContextMenu" Cursor="{Binding IsWaitCursor, Converter={asm:BoolToCursorConverter}, Mode=TwoWay}">
            <MenuItem Header="Открыть" 
				Command="{Binding Path=DataContext.OpenWayBillCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}" />
            <Separator />
            <MenuItem Header="Поставщик" Command="{Binding Path=OpenAgreementCardCommand}" IsEnabled="False"/>
        </ContextMenu>



и в реализовал следующий код в WayBillCollectionViewModel (это DataContext of WayBillCollectionView):

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public ICommand OpenWayBillCommand
        {
            get
            {
                return _openWayBillCommand ??
                    (_openWayBillCommand = new RelayCommand(p => OpenWayBillView()));
            }
        }

public void OpenWayBillView()
        {
            IsWaitCursor = true;
            SelectedWayBillViewModel.OpenWindowCommonView();
            IsWaitCursor = false;
        }



И вуаля!!! Все работает! Надеюсь кому-нить пригодится.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / в DataGrid не меняется Cursor
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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