2016-04-24 288 views
0

私はwpfアプリケーションを開発しており、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 wait質問に追加します –

+0

ItemArrayがその列(Row.ItemArray [1])を参照しているため、列1(ID)が取得されています。 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)); 
     } 
    } 
} 

のViewModel .....

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

私はこのコードを正しく理解していませんが、実装しようとしています。 –

+0

このコードを正しく使用できませんでした。 wpfでwinformのウィンドウを1つの目的のために:p、あなたの返信にはありがとう:) –

関連する問題