Установка необходимого индекса Combobox после вызова метода C # WPF - PullRequest
0 голосов
/ 09 января 2019

Я занимаюсь разработкой приложения MVVM, и у меня есть логика в отношении добавления элементов в Combobox, помещенный в DataGridTemplateColumn. Каждый сгенерированный комбинированный список связан с наблюдаемой коллекцией, которая обновляется каждый раз, когда изменяется Строка данных. В выпадающем списке Combobox есть только два элемента. Поскольку коллекция является свойством класса, необходимого для каждой строки, привязка ComboBox и элементы DropDownList отображаются как намеренные. Значение с индексом [0] является значением по умолчанию, редактируемое. В индексе [1] у меня есть SumProduct некоторых свойств упомянутого класса, который работает и отображается в DropDownList конкретного ComboBox.

Я хочу добиться, чтобы этот элемент [1] появился в ComboBox при вызове одного из методов для подсчета этого SumProducts.

XAML:

  <DataGridTemplateColumn Header="PRĄD POJEMNOŚCIOWY [A]" HeaderStyle="{StaticResource PRAD_POJEMNOSCIOWY}">
   <DataGridTemplateColumn.CellTemplate>
    <DataTemplate >
     <ComboBox Name="PradPojemnosciowyComboBox"
               SelectedValue="{Binding SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
               ItemsSource="{Binding Path=LiniaWyComboBox, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
               IsEditable="True"
               IsReadOnly="False"
               Text="{Binding Prad_pojemnosciowy, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
               IsTextSearchEnabled="False"
               IsSynchronizedWithCurrentItem="False"
               PreviewKeyDown="PradPojemnosciowyComboBox_OnPreviewKeyDown">
     <ComboBox.Style>
      <Style TargetType="ComboBox">
       <Style.Triggers>
         <Trigger Property="SelectedValue" Value="{x:Null}">
         <Setter Property="SelectedIndex" Value="0"/>
        </Trigger>
       </Style.Triggers>
      </Style>
     </ComboBox.Style>

    </ComboBox>
  </DataTemplate>
 </DataGridTemplateColumn.CellTemplate>  
 ....

/// одно из свойств, которое вызывает метод в MainWindow.xaml.cs

 <DataGridTemplateColumn Header="DŁUGOŚĆ [km]" >
  <DataGridTemplateColumn.CellTemplate >
   <DataTemplate>
    <TextBox Name="dlugoscTextBox" 
             Background="{StaticResource navyColor}"   Validation.ErrorTemplate="{StaticResource validationTemplate}"
             Style="{StaticResource textBoxInError}"
             TextChanged="TextBox_OnTextChanged">
           <TextBox.Text>
            <Binding Path="długość" 
                     Mode="TwoWay"
                     UpdateSourceTrigger="PropertyChanged">
              <Binding.ValidationRules>
               <validator:DoubleValidator Min="0" Max="1000"/>
              </Binding.ValidationRules>
            </Binding>
          </TextBox.Text>
         </TextBox>
       </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>
     </DataGridTemplateColumn>

PradPojemnosciowyComboBox_OnPreviewKeyDown:

    private void PradPojemnosciowyComboBox_OnPreviewKeyDown(object sender, KeyEventArgs e)
    {

        ComboBox tb = (ComboBox)sender;

        if (tb.Text != null)
        {
            var value = 0.0;
            bool isTry = Double.TryParse(tb.Text, out value);
            if (isTry)
            {

                SelectedItem = value;

                var lineSelected = (modelGPZ.GetLineWyList().FirstOrDefault(x => x.isSelected == true));
                if (lineSelected != null)
                {
                    var u = e.OriginalSource as UIElement;
                    if (e.Key == Key.Enter && u != null)
                    {
                        lineSelected.Prad_pojemnosciowy = value;
                        e.Handled = true;
                        u.MoveFocus(new TraversalRequest(FocusNavigationDirection.Down));
                    }
                }
                refreshLineWy();
                if (tb.Text != lineSelected.LiniaWyComboBox[0].ToString())
                {
                    tb.Text = lineSelected.LiniaWyComboBox[0].ToString();
                    OnPropertyChanged("SelectedItem");
                    OnPropertyChanged("LiniaWyComboBox");
                }

            }
        }
    }

Метод, который вызывается, подсчитывает все необходимые значения и показывает их в определенном элементе ComboBox [1] из DropDownList. Опять же, мне нужно показать элемент [1] из ComboBox после обновления или, как я думаю, - вызвать метод, который обновляет значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...