У меня возникла самая неприятная проблема, с которой я столкнулся некоторое время, у меня есть настройка, как показано ниже, и недавно она перестала работать на компьютерах клиентов без причины (или нет причин, которые я могу сказать Заметьте, что я не менял код в этом разделе в течение нескольких месяцев, и это только начиналось на прошлой неделе), что происходит, когда текст не становится видимым, когда пользователь нажимает на редактирование, странно, что он работает 100 % в отладке, выпуске (с использованием VS2010) и установке программы на моем компьютере, и я в тупике, я могу вообще воспроизвести на своем компьютере. Мой вопрос просто (albiet немного расплывчатый) может кто-нибудь указать или сказать мне, где искать его отладить это?WPF привязка не обновляется должным образом
Разрез Модель (только типичное связывание):
private bool _editingSpecifications = false;
public bool EditingSpecifications
{
get { return _editingSpecifications; }
set
{
System.Windows.MessageBox.Show("In EditingSpecifications property PRE: "+value);
if (_editingTraceSpecifications == value)
return;
_editingSpecifications = value;
base.OnPropertyChanged("EditingSpecifications");
System.Windows.MessageBox.Show("In EditingSpecifications property POST");
}
}
Вид:
<TextBox Visibility="{Binding Path=EditingSpecifications, Converter={StaticResource BoolToVis2}}" Text="{Binding Path=Specifications, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Width="262">...</TextBox>
и конвертер:
public class BoolToVisibiltyConverter2 : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (targetType != typeof(Visibility))
throw new InvalidOperationException("The target must be a Visibility");
System.Windows.MessageBox.Show((bool)value + " :BoolToVisibiltyConverter2");
if ((bool)value)
return Visibility.Visible;
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if ((Visibility)value == Visibility.Visible)
return true;
return false;
}
}
Ее установка MVVM, где ViewModel связывается с просмотр по требованию (т. е. когда пользователь хочет отредактировать и т. д.), приведенный выше код - это все, что я считаю уместным (если вам нужно больше просто спросить :)), как вы можете видеть, у меня есть некоторый MessageBox всплывал и от этого я получаю такой сценарий:
Пользователь загружает первых View хитов редактировать MessageBox выскакивает
1) «В EditingSpecifications собственности PRE:» + значение
2) значение (BOOL) + «: BoolToVisibiltyConverter2»
3) «В EditingSpecifications POST недвижимости»
Все работает, как ожидалось, однако по загрузке второй вид (обратите внимание, это может быть даже тот же вид просто закрыт и вновь открыт)
1) "В свойстве EditingSpecifications PRE:" + значение
2) (bool) значение + ": BoolToVisibiltyConverter2" - но не это, поэтому в других словах конвертер не вызывается во второй и последующих попытках редактирования спецификаций.
3) «В EditingSpecifications собственности POST»
Если вы снова попали редактирования в том же окне вы только получаете:
1) «В EditingSpecifications свойство PRE:» + значение - которое вроде как ожидается.
Edit- Бит Более подробно Проблема в том, что только на первой попытке редактирования будет текстовое поле станет видимым, и не будет видно на последующих запросах после закрытия и открытия вид:/И я чувствую имеет какое-то отношение к тому, что привязка не обновляется из ViewModel при запросе на обновление, но я не могу ее реплицировать.
И единственный способ сбросить это - закрыть и открыть программу, и, как я уже сказал, я могу только воспроизвести это поведение на компьютере клиентов и никогда не использовать самостоятельно. Так кто-нибудь может рассказать мне или указать мне в любом направлении, где искать, пожалуйста.
Добавить окно с сообщением 'OnPropertyChanged()', чтобы узнать, действительно ли событие создано (т. Е. Если кто-нибудь его обрабатывает) –
Пожалуйста, покажите свой код для «загрузка второго представления» и «нажмите править». И это не ваша проблема, но я думаю: «if (_editingTraceSpecifications == value)» должно быть «if (_editingSpecifications == value)» – MTR
haha yea sorry Я переименовал много вещей, прежде чем я разместил их здесь, чтобы не перейдя к проблеме с именами, возможно, просто пропустил ее, когда переименовал :) Я закончил просто переписывать сегмент кода, и он отлично работает, теперь, честно говоря, я ничего не менял, потому что, по-моему, это могло повлиять на него, за исключением, может быть, одной вещи, но это было Не объясняю, почему это нормально работает на моем компьютере, но не в другом:/ – Heinrich