CellEditEnding not sending new value to SelectedItem Binding












0














I am firing an ICommand when a cell is changed in my DataGrid:



PageStock.xaml



<DataGrid ItemsSource="{Binding StockQuantities}" 
SelectedItem="{Binding SelectedStockQuantity}"
x:Name="dataGridConsignments"
Margin="10,47,10,9.6"
ColumnWidth="*" AutoGenerateColumns="False">

<i:Interaction.Triggers>
<i:EventTrigger EventName="CellEditEnding">
<i:InvokeCommandAction Command="{Binding Test}"/>
</i:EventTrigger>
</i:Interaction.Triggers>

<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True" Header="Bell Number" Width="100" Binding="{Binding BellNumber}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="Description" Binding="{Binding Description}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="False" Header="Quantity" Width="100" Binding="{Binding Quantity}" ></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>


But when the ICommand fires, I can see that SelectedStockQuantity still contains the old Quantity:



PageStockViewModel.cs



public StockQuantityViewModel SelectedStockQuantity { get; set; }
private ICommand test;
public ICommand Test
{
get
{
return test
?? (test = new ActionCommand(() =>
{
var stockQ = StockQuantities.FirstOrDefault(sq => SelectedStockQuantity.Id == sq.Id);
Commands.UpdateStockQuantity(stockQ.BellNumber, SelectedStockQuantity.Quantity);
}));
}
}


If I then change the cell again without navigating to a new page, then the previous value will be applied (I can see it in SelectedStockQuantity.Quantity)



Why is this happening? How can I get the newly edited value in my ICommand?



StockQuantityViewModel



class StockQuantityViewModel : BaseViewModel
{
public int Id { get; set; }
public StockQuantity StockQuantity { get; set; }
public string BellNumber { get; set; }
public string ArtemisNumber { get; set; }
public int Quantity { get; set; }
public string Description { get; set; }

public StockQuantityViewModel(StockQuantity stockQuantity)
{
StockQuantity = stockQuantity;

Id = stockQuantity.id;
BellNumber = stockQuantity.Part.BellNumber;
ArtemisNumber = stockQuantity.Part.ArtemisNumber;
Quantity = stockQuantity.Quantity;
Description = stockQuantity.Part.Description;
}
}









share|improve this question



























    0














    I am firing an ICommand when a cell is changed in my DataGrid:



    PageStock.xaml



    <DataGrid ItemsSource="{Binding StockQuantities}" 
    SelectedItem="{Binding SelectedStockQuantity}"
    x:Name="dataGridConsignments"
    Margin="10,47,10,9.6"
    ColumnWidth="*" AutoGenerateColumns="False">

    <i:Interaction.Triggers>
    <i:EventTrigger EventName="CellEditEnding">
    <i:InvokeCommandAction Command="{Binding Test}"/>
    </i:EventTrigger>
    </i:Interaction.Triggers>

    <DataGrid.Columns>
    <DataGridTextColumn IsReadOnly="True" Header="Bell Number" Width="100" Binding="{Binding BellNumber}"></DataGridTextColumn>
    <DataGridTextColumn IsReadOnly="True" Header="Description" Binding="{Binding Description}"></DataGridTextColumn>
    <DataGridTextColumn IsReadOnly="False" Header="Quantity" Width="100" Binding="{Binding Quantity}" ></DataGridTextColumn>
    </DataGrid.Columns>
    </DataGrid>


    But when the ICommand fires, I can see that SelectedStockQuantity still contains the old Quantity:



    PageStockViewModel.cs



    public StockQuantityViewModel SelectedStockQuantity { get; set; }
    private ICommand test;
    public ICommand Test
    {
    get
    {
    return test
    ?? (test = new ActionCommand(() =>
    {
    var stockQ = StockQuantities.FirstOrDefault(sq => SelectedStockQuantity.Id == sq.Id);
    Commands.UpdateStockQuantity(stockQ.BellNumber, SelectedStockQuantity.Quantity);
    }));
    }
    }


    If I then change the cell again without navigating to a new page, then the previous value will be applied (I can see it in SelectedStockQuantity.Quantity)



    Why is this happening? How can I get the newly edited value in my ICommand?



    StockQuantityViewModel



    class StockQuantityViewModel : BaseViewModel
    {
    public int Id { get; set; }
    public StockQuantity StockQuantity { get; set; }
    public string BellNumber { get; set; }
    public string ArtemisNumber { get; set; }
    public int Quantity { get; set; }
    public string Description { get; set; }

    public StockQuantityViewModel(StockQuantity stockQuantity)
    {
    StockQuantity = stockQuantity;

    Id = stockQuantity.id;
    BellNumber = stockQuantity.Part.BellNumber;
    ArtemisNumber = stockQuantity.Part.ArtemisNumber;
    Quantity = stockQuantity.Quantity;
    Description = stockQuantity.Part.Description;
    }
    }









    share|improve this question

























      0












      0








      0







      I am firing an ICommand when a cell is changed in my DataGrid:



      PageStock.xaml



      <DataGrid ItemsSource="{Binding StockQuantities}" 
      SelectedItem="{Binding SelectedStockQuantity}"
      x:Name="dataGridConsignments"
      Margin="10,47,10,9.6"
      ColumnWidth="*" AutoGenerateColumns="False">

      <i:Interaction.Triggers>
      <i:EventTrigger EventName="CellEditEnding">
      <i:InvokeCommandAction Command="{Binding Test}"/>
      </i:EventTrigger>
      </i:Interaction.Triggers>

      <DataGrid.Columns>
      <DataGridTextColumn IsReadOnly="True" Header="Bell Number" Width="100" Binding="{Binding BellNumber}"></DataGridTextColumn>
      <DataGridTextColumn IsReadOnly="True" Header="Description" Binding="{Binding Description}"></DataGridTextColumn>
      <DataGridTextColumn IsReadOnly="False" Header="Quantity" Width="100" Binding="{Binding Quantity}" ></DataGridTextColumn>
      </DataGrid.Columns>
      </DataGrid>


      But when the ICommand fires, I can see that SelectedStockQuantity still contains the old Quantity:



      PageStockViewModel.cs



      public StockQuantityViewModel SelectedStockQuantity { get; set; }
      private ICommand test;
      public ICommand Test
      {
      get
      {
      return test
      ?? (test = new ActionCommand(() =>
      {
      var stockQ = StockQuantities.FirstOrDefault(sq => SelectedStockQuantity.Id == sq.Id);
      Commands.UpdateStockQuantity(stockQ.BellNumber, SelectedStockQuantity.Quantity);
      }));
      }
      }


      If I then change the cell again without navigating to a new page, then the previous value will be applied (I can see it in SelectedStockQuantity.Quantity)



      Why is this happening? How can I get the newly edited value in my ICommand?



      StockQuantityViewModel



      class StockQuantityViewModel : BaseViewModel
      {
      public int Id { get; set; }
      public StockQuantity StockQuantity { get; set; }
      public string BellNumber { get; set; }
      public string ArtemisNumber { get; set; }
      public int Quantity { get; set; }
      public string Description { get; set; }

      public StockQuantityViewModel(StockQuantity stockQuantity)
      {
      StockQuantity = stockQuantity;

      Id = stockQuantity.id;
      BellNumber = stockQuantity.Part.BellNumber;
      ArtemisNumber = stockQuantity.Part.ArtemisNumber;
      Quantity = stockQuantity.Quantity;
      Description = stockQuantity.Part.Description;
      }
      }









      share|improve this question













      I am firing an ICommand when a cell is changed in my DataGrid:



      PageStock.xaml



      <DataGrid ItemsSource="{Binding StockQuantities}" 
      SelectedItem="{Binding SelectedStockQuantity}"
      x:Name="dataGridConsignments"
      Margin="10,47,10,9.6"
      ColumnWidth="*" AutoGenerateColumns="False">

      <i:Interaction.Triggers>
      <i:EventTrigger EventName="CellEditEnding">
      <i:InvokeCommandAction Command="{Binding Test}"/>
      </i:EventTrigger>
      </i:Interaction.Triggers>

      <DataGrid.Columns>
      <DataGridTextColumn IsReadOnly="True" Header="Bell Number" Width="100" Binding="{Binding BellNumber}"></DataGridTextColumn>
      <DataGridTextColumn IsReadOnly="True" Header="Description" Binding="{Binding Description}"></DataGridTextColumn>
      <DataGridTextColumn IsReadOnly="False" Header="Quantity" Width="100" Binding="{Binding Quantity}" ></DataGridTextColumn>
      </DataGrid.Columns>
      </DataGrid>


      But when the ICommand fires, I can see that SelectedStockQuantity still contains the old Quantity:



      PageStockViewModel.cs



      public StockQuantityViewModel SelectedStockQuantity { get; set; }
      private ICommand test;
      public ICommand Test
      {
      get
      {
      return test
      ?? (test = new ActionCommand(() =>
      {
      var stockQ = StockQuantities.FirstOrDefault(sq => SelectedStockQuantity.Id == sq.Id);
      Commands.UpdateStockQuantity(stockQ.BellNumber, SelectedStockQuantity.Quantity);
      }));
      }
      }


      If I then change the cell again without navigating to a new page, then the previous value will be applied (I can see it in SelectedStockQuantity.Quantity)



      Why is this happening? How can I get the newly edited value in my ICommand?



      StockQuantityViewModel



      class StockQuantityViewModel : BaseViewModel
      {
      public int Id { get; set; }
      public StockQuantity StockQuantity { get; set; }
      public string BellNumber { get; set; }
      public string ArtemisNumber { get; set; }
      public int Quantity { get; set; }
      public string Description { get; set; }

      public StockQuantityViewModel(StockQuantity stockQuantity)
      {
      StockQuantity = stockQuantity;

      Id = stockQuantity.id;
      BellNumber = stockQuantity.Part.BellNumber;
      ArtemisNumber = stockQuantity.Part.ArtemisNumber;
      Quantity = stockQuantity.Quantity;
      Description = stockQuantity.Part.Description;
      }
      }






      c# wpf binding






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 23 '18 at 8:28









      Bassie

      3,7661846




      3,7661846
























          1 Answer
          1






          active

          oldest

          votes


















          0














          Seems to be working after making this change:



          <DataGridTextColumn IsReadOnly="False" Header="Quantity" Width="100" 
          Binding="{Binding Quantity,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" >
          </DataGridTextColumn>


          I adding this to the Binding:



          Mode=TwoWay,UpdateSourceTrigger=PropertyChanged





          share|improve this answer





















            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53443040%2fcelleditending-not-sending-new-value-to-selecteditem-binding%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            Seems to be working after making this change:



            <DataGridTextColumn IsReadOnly="False" Header="Quantity" Width="100" 
            Binding="{Binding Quantity,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" >
            </DataGridTextColumn>


            I adding this to the Binding:



            Mode=TwoWay,UpdateSourceTrigger=PropertyChanged





            share|improve this answer


























              0














              Seems to be working after making this change:



              <DataGridTextColumn IsReadOnly="False" Header="Quantity" Width="100" 
              Binding="{Binding Quantity,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" >
              </DataGridTextColumn>


              I adding this to the Binding:



              Mode=TwoWay,UpdateSourceTrigger=PropertyChanged





              share|improve this answer
























                0












                0








                0






                Seems to be working after making this change:



                <DataGridTextColumn IsReadOnly="False" Header="Quantity" Width="100" 
                Binding="{Binding Quantity,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" >
                </DataGridTextColumn>


                I adding this to the Binding:



                Mode=TwoWay,UpdateSourceTrigger=PropertyChanged





                share|improve this answer












                Seems to be working after making this change:



                <DataGridTextColumn IsReadOnly="False" Header="Quantity" Width="100" 
                Binding="{Binding Quantity,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" >
                </DataGridTextColumn>


                I adding this to the Binding:



                Mode=TwoWay,UpdateSourceTrigger=PropertyChanged






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 23 '18 at 8:42









                Bassie

                3,7661846




                3,7661846






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53443040%2fcelleditending-not-sending-new-value-to-selecteditem-binding%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    What visual should I use to simply compare current year value vs last year in Power BI desktop

                    How to ignore python UserWarning in pytest?

                    Alexandru Averescu