2017-08-18 4 views
1

は新しいWPFプロジェクトに取り組んでおり、WPFのオブジェクトのリストにDataGrid内のTextBoxのバインドに苦労しています。 誰でも私の修正に手伝ってもらえますか?

これは私の注文オブジェクトをバインドしてDatagridの行を生成するためのコードです(簡略版)。 ユーザーが注文品を変更することができますし、それはアンダーラインオブジェクトにバインドする必要があります。ユーザー一度 は私はTextBlock内の変化を表示しています読む注文ボタンをクリックします。問題:TextBoxの変更がOrdersオブジェクトに更新されていません。

ObservableCollection<StxOrdr> Orders = new ObservableCollection<StxOrdr>(); 

private void Window_Initialized(object sender, EventArgs e) 
{ 
    Orders.Add(new StxOrdr() { ID = 1, Desc = "Order-#1", Item1 = "11", Item2 = "12", Item3 = "13" }); 
    Orders.Add(new StxOrdr() { ID = 2, Desc = "Order-#2", Item1 = "21", Item2 = "22", Item3 = "23" }); 
    Orders.Add(new StxOrdr() { ID = 3, Desc = "Order-#3", Item1 = "31", Item2 = "32", Item3 = "33" });       
    Dg2.ItemsSource = Orders; 
} 

private void ReadUpdatedOrders(object sender, RoutedEventArgs e) 
{ 
    TxtBlk.Text = ""; 
    foreach (StxOrdr odr in Orders) 
    { 
     TxtBlk.Text += string.Format("{0}: {1} - {2} - {3}\n", odr.Desc, odr.Item1, odr.Item2, odr.Item3); 
    } 
} 

ウィンドウXMLの

<DataGrid x:Name="Dg2" HorizontalAlignment="Left" Margin="21,295,0,0" VerticalAlignment="Top" Height="230" Width="451" 
AutoGenerateColumns="false" ItemsSource="{Binding Source=Orders}" > 
<DataGrid.Columns> 
    <DataGridTextColumn Header="ID" Binding="{Binding ID}" /> 
    <DataGridTextColumn Header="Desc" Binding="{Binding Desc}" Width="80"/> 
    <DataGridTextColumn Header="Item 1" Binding="{Binding Item1}" Width="60"/> 
    <DataGridTextColumn Header="Item 2" Binding="{Binding Item2}" Width="60"/> 
    <DataGridTemplateColumn Header="Item 3" > 
     <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <TextBox Text="{Binding Item3, Mode=OneWayToSource}" Width="60" />        
      </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
    </DataGridTemplateColumn> 
</DataGrid.Columns> 
</DataGrid> 

<TextBlock x:Name="TxtBlk" HorizontalAlignment="Left" Margin="489,295,0,0" TextWrapping="Wrap" Text=" Updated order details:" 
      VerticalAlignment="Top" Height="176" Width="408" Background="#FFFFFCBC"/> 
<Button x:Name="Btn2_Copy" Content="Read Orders" HorizontalAlignment="Left" Margin="489,476,0,0" 
     VerticalAlignment="Top" Width="94" Click="ReadUpdatedOrders"/> 

UI画面のスクリーンショット

答えて

1

私はほとんどのものが正しいに見えると思います。 Orders.csはINotifyPropertyChangedのを実装していることを確認して、コード

<TextBox Text="{Binding Item3, Mode=OneWayToSource}" Width="60" /> 

のこの行は、モード=双方向およびUpdateSourceTrigger =のPropertyChangedに更新されていること。私はそれが動作

<TextBox Text="{Binding Item3, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="60" /> 
+0

いやに変更します。ありがとう、相棒。 – Chindil