У меня есть пользовательский интерфейс WPF, как показано ниже. У него есть комбинированный список, содержащий все элементы, каждый элемент содержит 2 сегмента. Представления сегментов размещаются на разных элементах управления контентом. Каждое представление сегмента имеет флажок для включения / отключения содержимого всего сегмента.
myпривязка в сегментном представлении
<TextBox Grid.Row="0" Grid.Column="1" Name="leftDistanceTextBox"
Text="{Binding LeftDistance, UpdateSourceTrigger=PropertyChanged}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="TextChanged">
<i:InvokeCommandAction Command="{Binding DistanceChangedCommand}">
<i:InvokeCommandAction.CommandParameter>
<MultiBinding Converter="{StaticResource BeamIntersectionMultiConverter}" ConverterParameter="true">
<Binding ElementName="leftDistanceTextBox"/>
<Binding ElementName="enabledCheckBox"/>
</MultiBinding>
</i:InvokeCommandAction.CommandParameter>
</i:InvokeCommandAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
мой конвертер
public class BeamIntersectionParamMultiConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
// it never stops here in debug mode, except the initializtion
Debugger.Break();
if (Validate(values, parameter))
{
TextBox control = values[0] as TextBox;
CheckBox activation = values[1] as CheckBox;
bool isEnabled = activation.IsChecked == true ? true : false;
string text = (string)parameter;
bool.TryParse(text, out bool isLeft);
return new BeamIntersectionParam(control, isEnabled, isLeft);
}
return null;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
return null;
}
Проблема заключается в следующем: я хочу проверить / обновить модель представления с помощью interation.Command. Эта команда имеет MultiBindnig с одной привязкой к текущему текстовому полю и другой привязкой к упомянутому флажку. Однако параметр, переданный в вызванный метод, имеет только начальный статус первого элемента в выпадающем списке (хотя содержимое TextBox обновлено). Позже я добавляю Debugger.Break () к своему конвертеру в режиме отладки и обнаружил, что конвертер был вызван только один раз во время инициализации представления.
Если мой конвертер был вызван только один раз, почемуЯ получаю актуальное содержимое связанного текстового поля в методе invoke?
Если он вызывается каждый раз, почему код не останавливается в режиме отладки преобразователя?
Что происходити как это исправить? Спасибо всем большое.
P / s: Я заранее извиняюсь, потому что английский не моя мать. Если вам нужна дополнительная информация, пожалуйста, спросите.