ValueConverter вызывается несколько раз во время навигацииC#

Место общения программистов C#
Ответить
Anonymous
 ValueConverter вызывается несколько раз во время навигации

Сообщение Anonymous »

Я что-то не могу понять в конвертере, используемом с привязкой. :-(

Я создал простой пример с Mvvm-Light...

здесь полное решение: https://testbindingwithconverter.codepl ... rol/latest

здесь изображение: https://i.sstatic.net/wUf89.png
и ниже резюме исходный код:

CarsView
CarsViewModel

Код: Выделить всё

public class CarsViewModel : ViewModelBase
{
private ObservableCollection cars;
private Car selectedCar;

public CarsViewModel()
{
if (IsInDesignMode)
{
}
else
{
// INIT
this.cars = new ObservableCollection();
this.selectedCar = null;

// FAKE DATA
for (int i = 1; i  Cars);
}
}
}

public Car SelectedCar
{
get
{
return selectedCar;
}

set
{
if (value != selectedCar)
{
selectedCar = value;
RaisePropertyChanged(() => SelectedCar);
}
}
}
}
Конвертер

Код: Выделить всё

public class IntToOpacityConverter : System.Windows.Data.IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double opacity = 1;
Car c = value as Car;

if (c != null)
{
if (c.Id == 5)
{
opacity = 0.3;
}
}

System.Diagnostics.Debug.WriteLine("[IntToOpacityConverter] \t" + "Rectangle Opacity: " + opacity);
return opacity;
}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
// One-Way conversion!
return null;
}
В CarsView, когда я нажимаю на элемент 5 ListBox, для свойства «Непрозрачность прямоугольника» устанавливается значение 0,3, в противном случае — значение 1.

Теперь, когда я возвращаюсь к HomeView, а затем снова к CarsView, если я нажимаю между элементами, конвертер вызывается 2 раза!
И еще раз, если я пойду вернитесь в HomeView и вернитесь в CarsView, конвертер вызывается 3 раза! И так далее...

Почему?

Подробнее здесь: https://stackoverflow.com/questions/254 ... navigation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»