Я занимаюсь разработкой приложения 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 после обновления или, как я думаю, - вызвать метод, который обновляет значения.