powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / MVVM: DependencyProperty не видно для CheckBox в DataGrid.
2 сообщений из 2, страница 1 из 1
MVVM: DependencyProperty не видно для CheckBox в DataGrid.
    #38126643
ich100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуйста, если кто-нибудь знает
Есть окно с DataGrid'ом, есть источник данных в виде DataTable, который определяется в процессе работы программы (т.е. заранее не определен и может быть разным).
Source DataGrid является DataTable.DefaultView.
Использую автогенерацию полей, т.е. в xaml AutoGenerateColumns="True" и переопределяю в DataGridAutoGeneratingColumn колонку для столбца IsCheck, как DataGridTemplateColumn.
Она содержит CheckBox, при нажатии на который должна выполняться команда из моего ViewModel.
Для этого создаю для события Click DependencyProperty, которое выполняет команду и указываю, что он принадлежит CheckBox. Для CheckBox в DataGrid оно не видно, но если я добавляю на форму CheckBox все работает отлично. Подскажите как сделать, чтобы это свойство было видно и для CheckBox в DataGrid.
Код Window.XAML:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<Window.Resources>
        <DataTemplate x:Key="CellTemplateButtonTest" >
            <CheckBox  bev:CheckBoxClickBehaviour.CheckBoxClickCommand="{Binding Path=ButtonCommand}"               
        </DataTemplate>     
    </Window.Resources>
    <Grid> …
          <DataGrid  Grid.Row="0" x:Name="dataGrid2" 
                            ItemsSource="{Binding DV2}"
                            AutoGenerateColumns="True" 
                            AutoGeneratingColumn="g"
                             >
        </DataGrid>
            <CheckBox  Grid.Row="1"  Content="MyTestBev" IsThreeState="False" bev:CheckBoxClickBehaviour.CheckBoxClickCommand="{Binding Path=ButtonCommand}" />
    </Grid>
</Window>



Window. XAML.CS
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
        private void g(object sender, DataGridAutoGeneratingColumnEventArgs e)
        {
            if (e.PropertyName.Equals("IsCheck"))
            {
                DataGridTextColumn column = e.Column as DataGridTextColumn;
                DataGridTemplateColumn colCurr = new DataGridTemplateColumn();
                colCurr.CellTemplate = (DataTemplate)FindResource("CellTemplateButtonTest");
                   e.Column = colCurr;
                    
            }
          
        }


WindowViewModel:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
private DataView dV2;
        public DataView DV2
        {
            get { return dV2; }
            set
            {
                dV2 = value;
                FirePropertyChanged("DV2");
            }
        }
private void InitDaten()
        {
            DataTable dtm = new DataTable("Table");
            setDaten();
            DV2 = dtm.DefaultView();
            
        }  


DependencyProperty
Код: 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.
 class CheckBoxClickBehaviour
    {

        public static readonly DependencyProperty CheckBoxClickCommandProperty =
        DependencyProperty.RegisterAttached("CheckBoxClickCommand",
            typeof(RelayCommand),
            typeof(CheckBoxClickBehaviour),
            new FrameworkPropertyMetadata(new PropertyChangedCallback(OnCheckBoxClick)));


        public static RelayCommand GetCheckBoxClickCommand(DependencyObject element)
        {
            return element.GetValue(CheckBoxClickCommandProperty) as RelayCommand;
        }

        public static void SetCheckBoxClickCommand(DependencyObject element, RelayCommand value)
        {
            element.SetValue(CheckBoxClickCommandProperty, value);
        }

        public static void OnCheckBoxClick(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            CheckBox chBox = (CheckBox)d;
            if (chBox != null)
            {
                RelayCommand cmd = (RelayCommand)e.NewValue;
                if (e.OldValue == null && e.NewValue != null)
                     chBox.Click += new RoutedEventHandler(CB_Click);
                if (e.OldValue != null && e.NewValue == null)
                    chBox.Click -= new RoutedEventHandler(CB_Click);
           }
        }
        public static void CB_Click(Object sender, RoutedEventArgs e)
        {
            CheckBox chBox = (CheckBox)sender;
            RelayCommand cmd = (RelayCommand)chBox.GetValue(CheckBoxClickCommandProperty);
                    cmd.Execute(chBox);

        }


Предполагаю, что проблема в том, что у CheckBox в DataGrid в DataContext DataRowView а не WindowViewModel. Буду благодарна за любую помощь, подсказки, советы,ссылки
...
Рейтинг: 0 / 0
MVVM: DependencyProperty не видно для CheckBox в DataGrid.
    #38128290
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно думаешь.
eventtocommand
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / MVVM: DependencyProperty не видно для CheckBox в DataGrid.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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