2016-04-24 159 views
0

我开发一个WPF应用程序,我有一个“买家”命名DataGrid和当复选框被选中
我已经阅读计算器的一些问题,但都去了我的头,我想要访问的行值,我是无法理解他们作为业余尚未:(
这是我的DataGrid XAML代码: -获取DataGrid行值

<DataGrid x:Name="buyer" SelectionMode="Single" HorizontalAlignment="Left" SelectionUnit="FullRow" VerticalAlignment="Top" Height="550" Width="992" HorizontalScrollBarVisibility="Visible" IsReadOnly="True" AutoGenerateColumns="False" FrozenColumnCount="1" Margin="0,45,0,0" SelectionChanged="RowFocus" TargetUpdated="buyer_TargetUpdated"> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn Header="Joining" > 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <CheckBox IsChecked="{Binding IsSelected,UpdateSourceTrigger=PropertyChanged}"/> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
     <DataGridTextColumn Header="ID" Binding="{Binding buy_id}"/> 
     <DataGridTextColumn Header="Name" Binding="{Binding bname}"/> 
     <DataGridTextColumn Header="Number" Binding="{Binding mobileno}"/> 
    </DataGrid.Columns> 
</DataGrid> 

我也有同样的窗口,上一个按钮,点击就应该给我从那里复选框被选中的行中的值

编辑:目前,我检查如果该复选框是由控制台编写工作也将CheckBox秒。应该是第0列,对吗?但是,当我在控制台中我得到的下一列,即ID值打印出来,我用通过将下面的代码打印值: -

private void Button_Click_3(object sender, RoutedEventArgs e) 
    { 
     /* int i = 0; 
      Console.WriteLine("hey"); 

      foreach (var item in buyer.Items) 
      { 

       string s = (buyer.Items[i] as DataRowView).Row.ItemArray[0].ToString(); 
       if (i==0) 
       { 
        Console.WriteLine(s); 
        var row = buyer.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow; 


       } 
       i++; 
      }*/ 
     if (buyer.SelectedItems.Count > 0) 
      { 
       for (int i = 0; i < buyer.SelectedItems.Count; i++) 
       { 

        System.Data.DataRowView selectedFile =  (System.Data.DataRowView)buyer.SelectedItems[i]; 
        string str =  Convert.ToString(selectedFile.Row.ItemArray[0]); 
    Console.WriteLine(str); 
       } 
      } 
     } 

I used both commented and uncommented code 
+0

你能还包括是代码点击按钮时执行? –

+0

OK等待我将它添加到您 –

+0

越来越第1列(ID)的问题,因为ItemArray指向该列(Row.ItemArray [1])。使用ItemArray索引遍历列。 – ErnestoDeLucia

回答

0

试试这个....(使用RelayCommand在这里找到http://www.kellydun.com/wpf-relaycommand-with-parameter/

public class BasePropertyChanged : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    public void NotifyPropertyChanged(String info) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(info)); 
     } 
    } 
} 

视图模型.....

class Base_ViewModel : BasePropertyChanged 
{ 

    public RelayCommand<ObservableCollection<buyer>> ButtonClickCommand { get; set; } 

    private ObservableCollection<buyer> _buyer; 
    public ObservableCollection<buyer> buyer 
    { 
     get { return _buyer; } 
     set { _buyer = value; } 
    } 


    public Base_ViewModel() 
    { 
     ButtonClickCommand = new RelayCommand<ObservableCollection<buyer>>(OnButtonClickCommand); 
     buyer = new ObservableCollection<ViewModels.buyer>(); 
     buyer.Add(new buyer() { buy_id = 1, bname = "John Doe", mobileno = "" }); 
     buyer.Add(new buyer() { buy_id = 1, bname = "Jane Doe", mobileno = "" }); 
     buyer.Add(new buyer() { buy_id = 1, bname = "Fred Doe", mobileno = "" }); 
     buyer.Add(new buyer() { buy_id = 1, bname = "Sam Doe", mobileno = "" }); 

    } 

    private void OnButtonClickCommand(ObservableCollection<buyer> obj) 
    { // put a break-point here and obj will be the List of Buyer that you can then step though 

    } 
} 

买家类.....

public class buyer : BasePropertyChanged 
{ 
    private bool _IsSelected; 

    public bool IsSelected 
    { 
     get { return _IsSelected; } 
     set { _IsSelected = value; } 
    } 

    private string _bname; 

    public string bname 
    { 
     get { return _bname; } 
     set { _bname = value; NotifyPropertyChanged("bname"); } 
    } 

    private int _buy_id; 

    public int buy_id 
    { 
     get { return _buy_id; } 
     set { _buy_id = value; NotifyPropertyChanged("buy_id"); } 
    } 

    private string _mobileno; 

    public string mobileno 
    { 
     get { return _mobileno; } 
     set { _mobileno = value; NotifyPropertyChanged("mobileno"); } 
    } 
} 

XAML .....

<StackPanel> 
     <DataGrid x:Name="buyer" ItemsSource="{Binding buyer}" SelectionMode="Single" HorizontalAlignment="Left" SelectionUnit="FullRow" IsReadOnly="True" AutoGenerateColumns="False" FrozenColumnCount="1" > 
      <DataGrid.Columns> 
       <DataGridTemplateColumn Header="Joining" > 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <CheckBox IsChecked="{Binding IsSelected,UpdateSourceTrigger=PropertyChanged}"/> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
       <DataGridTextColumn Header="ID" Binding="{Binding buy_id}"/> 
       <DataGridTextColumn Header="Name" Binding="{Binding bname}"/> 
       <DataGridTextColumn Header="Number" Binding="{Binding mobileno}"/> 
      </DataGrid.Columns> 
     </DataGrid> 
     <Button Content="Button" Command="{Binding ButtonClickCommand}" CommandParameter="{Binding ElementName=buyer, Path=ItemsSource}" Margin="0,202,0,0"></Button> 
    </StackPanel> 

而且不要忘记设置你的DataContext在查看代码隐藏....

this.DataContext = new Base_ViewModel(); 
+0

我没有正确的理解这个代码,但我会努力实现并rply回来... –

+0

我无法正确地使用此代码,但后来我用WinForm窗口在wpf为dat一个目的:p,thanx虽然你的回复:) –