0

foreach(myDataGridのDataGridRow gvr)を使用するデータグリッドがあり、行の特定のセルから情報を取得して、それぞれのクラスプロパティ(e(a.MessageName = gvr.column [")に配置できる必要があります。 MessageName "]。value.ToString())。しかし、私はコラムに基づいて情報を取得する方法を理解していません。これが私がこれまでに持っているものです...

    foreach (DataGridRow gvr in dgAnnouncement.Items)
    {
         Announcement a = new Announcement();

         a.MessageName = gvr.Column["MessageName"].Value.ToString();
         a.Message = gvr.Column["Message"].Value.ToString();
     }

これが私のXAMLです...

<DataGrid AutoGenerateColumns="False" Height="631" ItemsSource="{Binding}" HorizontalAlignment="Left" SelectionMode="Single" SelectionUnit="FullRow" Margin="12,124,0,0" Name="dgAnnouncement" VerticalAlignment="Top" Width="976" >
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="MessageName"></DataGridTextColumn>
                        <DataGridTextColumn Header="Message"></DataGridTextColumn>
                    </DataGrid.Columns>
                </DataGrid>

ウェブを検索した後、私はまだ私のために働く解決策を見つけていませんので、助けてくれてありがとう。

4

1 に答える 1

0

わかりました。ユーザーが追加して値を入力できるアイテムのバインドされたリストが必要なようです。

これを実行する場合は、列をバインドするのが最善の方法です。

<DataGrid AutoGenerateColumns="False" Height="631" ItemsSource="{Binding}" HorizontalAlignment="Left" SelectionMode="Single" SelectionUnit="FullRow" Margin="12,124,0,0" Name="dgAnnouncement" VerticalAlignment="Top" Width="976" > 
    <DataGrid.Columns> 
        <DataGridTextColumn Header="MessageName" Binding="{Binding MessageName, Mode=TwoWay}"></DataGridTextColumn> 
        <DataGridTextColumn Header="Message" Binding="{Binding Message, Mode=TwoWay}"></DataGridTextColumn> 
    </DataGrid.Columns> 
</DataGrid> 

問題は、現在ItemsSourceを何に設定しているのかということです。

理想的には、これは強く型付けされたAppointmentオブジェクトのコレクションである必要があります(ObservableCollection<Appointment>多分)。ユーザーが新しい行を追加できるようにしますか?その場合はAdd、ソースコレクションでを実行するボタンを提供するか、データグリッドに実行させる必要があります(通常はTelerikのRadGridViewを使用しますが、値を入力できる「空の行」をサポートしていると思います)。一般に、ユーザーが新しい値を追加するための空の行があるグリッドがある場合、グリッドはバインドされている基になるコレクションを調べ、適切なメソッドを呼び出してアイテムを追加します。このコレクションがAddメソッドをサポートしていない場合(IBindingListがサポートしている場合など)、デフォルトでは、型のパラメーターなしのコンストラクターを使用して新しいアイテムを作成すると思います(これについてはよくわかりませんが、読む価値があるかもしれません)。

基本的に、これらのプロパティをバインドするTwoWayことにより、リスト内の各アイテムをユーザーがグリッド内で直接編集できることを意味します。ユーザーがプロパティを変更すると、基になるオブジェクトのそのプロパティが影響を受けます*。これは、これをすべて接続するためにコードを記述する必要がないことを意味します。バインドはcontrol->controlからも実行できるため、たとえば、別のグリッドItemsSourceSelectedItems最初のグリッドのプロパティにバインドすると、選択したアイテムで自動的に更新されます。

DataBindingの詳細については、ここで私の回答を確認してください

データバインディングはどのように機能しますか?

編集:

  • グリッドを経由せずに基になるオブジェクトに変更を加えても、グリッドに表示されることを追加できますが、オブジェクトがプロパティ変更通知メカニズムを実装している場合に限りますINotifyPropertyChanged(System.ComponentModel名前空間など)。
于 2012-07-11T15:29:52.737 に答える