2016-05-03 2 views
1

У меня есть сетка данных, которая содержит столбец флажка. Я сделал модификацию этой формы, используя флажок multiselect для проверки всех строк сразу. И это сработало. но я не смог получить значение из этого столбца флажка, когда приложение запущено, потому что я не знал, как получить доступ к столбцу данных. может ли кто-нибудь помочь мне с возможностью получить значение флажка (true/false). Это то, что я сделал до сих пор.Как получить значение из столбца шаблона в WPF DataGrid.

Код: XAML

<DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding Path= Id}" Header="Id" Visibility="Hidden"/> 
      <DataGridTextColumn Binding="{Binding Path= Category}" Header="Category" Width="320"/> 
      <!--<DataGridCheckBoxColumn Binding="{Binding Path= Check}" Width="*"/>--> 

      <DataGridTemplateColumn> 
       <DataGridTemplateColumn.Header> 
        <CheckBox x:Name="headerCheckBox" /> 
       </DataGridTemplateColumn.Header> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <CheckBox Name="chkSelectAll" HorizontalAlignment="Center" IsChecked="{Binding IsChecked, ElementName=headerCheckBox, Mode=OneWay}" /> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

     </DataGrid.Columns> 

Код: C#

for (int i = 0; i < datagridview.Items.Count; i++) 
      { 
       ÇategoryData CD = (ÇategoryData)datagridview.Items[i]; 
       if (CD.Check == true) 
       { 
        //it always returns false even checked 
       } 
      } 

ответ

0

Здесь много вещей, то странно на мой взгляд. Я действительно не понимаю, почему ваш чекбокс строк называется «chkSelectAll» Предлагаю вам попробовать следующее: каждый флажок может быть проверен, не проверен самим. Когда вы нажмете флажок «Заголовки заголовков», то флажок «Столбцы столбцов» получит одно и то же состояние (проверено, был ли хотя бы один флажок снят и снят флажок, если отмечены флажки «ВСЕ строки»).

Если это правильно, вы должны сделать следующее: Как упоминал Сидерит Закведекс (я полагаю, что он имел в виду это), вы должны привязать значение Checkbox IsChecked к свойству базового ViewModel строки.

чем ваши Заголовки Checkbox следует также привязать к имуществу ViewModel, который держит Observable Коллекция вроде следующего:

public bool AllSelected 
{ 
    get { return !this.MyCollection.Any(item => !item.IsSelected); } 
    set 
    { 
     var toggle = this.MyCollection.Any(item => !item.IsSelected); 
     foreach (var itm in this.MyCollection.Where(item => item.IsSelected != toggle)) 
      itm.IsSelected = toggle; 
    } 
} 

IsSelected-Недвижимость-сеттер из коллекции Items-ViewModel должны уведомить ParentViewModel (который содержит коллекцию), что один IsSelected/IsChecked (но вы хотите его назвать) Состояние изменилось. Так что событие PropertyChanged для PropertyName «AllSelected» будет поднято.

В коллекции Items ViewModel недвижимости может выглядеть следующим образом:

public bool IsSelected 
{ 
    get { return _isSelected; } 
    set 
    { 
     _isSelected = value; 
     RaisePropertyChanged("IsSelected"); 
     ParentViewModel.RaisePropertyChanged("IsSelected"); 
    } 
} 

Оба Флажки (одна в шаблоне заголовка и один в CellTemplate) являются связываются с Mode=Twoway

+0

спасибо, я попробую этот путь –

1

Прежде всего, я не понимаю, что это значение будет использоваться? Я имею в виду, что флажок действует как механизм пользовательского интерфейса для выбора или отмены выбора всех остальных полей. Но даже если вам действительно нужна ценность, почему бы вам не привязать его к свойству ViewModel?

Как это:

<CheckBox x:Name="headerCheckBox" Value="{Binding SelectAllCheckboxInTheViewModel}" /> 
+0

Im используя значение (истина или false) для обновления только строк с проверенными данными. –

+0

Почему Downvote? Это именно то, что я тоже думал. Вам нужно значение каждого состояния CheckBox для строк, а не значение флажка заголовка. –

+0

Да, это то, что я хочу, но я не мог получить значение этого флажка. Как я могу получить к нему доступ? –

Смежные вопросы