У меня странное поведение, если я хочу обновить свой интерфейс пользователя RaisePropertyChanged. Я использую второе решение (от Johnathan1) от this post: я реализовал RadioBoolToIntConverter.RaisePropertyChanged устанавливает значение переключателей
My VM выглядит следующим образом:
public int myFilterRadioButtonInt
{
get
{
return _Filter.FilterMyProperty ? 1 : 2;
}
set
{
if (value == 1)
_Filter.FilterMyProperty = true;
else if (value == 2)
_Filter.FilterMyProperty = false;
else
return;
RaisePropertyChanged("myFilterRadioButtonInt");
}
}
конвертер выглядит следующим образом (по Jonathan1 из this post):
public class RadioBoolToIntConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int integer = (int)value;
if (integer==int.Parse(parameter.ToString()))
return true;
else
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return parameter;
}
}
Для понимания _Filter.FilterMyProperty
является булево значение модели, которая несет ответственность, если мой значение, которое будет отфильтровано, отображается или не отображается. Это переплетены 2 радиокнопок с помощью RadioBoolToIntConverter:
<RadioButton IsChecked="{Binding Path=myFilterRadioButtonInt, Converter={StaticResource RadioBoolToIntConverter}, ConverterParameter=1}">Show</RadioButton>
<RadioButton IsChecked="{Binding Path=myFilterRadioButtonInt, Converter={StaticResource RadioBoolToIntConverter}, ConverterParameter=2}">Don't show</RadioButton>
Связывание и переключая Radiobuttons работает должным образом.
Проблема в том, если установить _Filter.FilterMyProperty = true
с помощью кода (установить стандартный фильтр, где это значение должно быть фильтрованной), а затем сделать RaisePropertyChanged("myFilterRadioButtonInt")
_Filter.FilterMyProperty
будет установлен в false
.
Edit:
По RaisePropertyChanged("myFilterRadioButtonInt")
(наречено сеттер фильтра собственности в VM) сеттер myFilterRadioButtonInt
вызывается снова, и он будет установить текущее значение RadioBox (в моем случае value
является 2
поэтому сеттер будет установлен обратно _Filter.FilterMyProperty
к false
.
это не возможно изменить стоимость RadioBoxes кода с помощью этого метода. Я думал, что только добытчик будет вызываться, когда я называю RaisePropertyChanged("myFilterRadioButtonInt")
. Как я могу решить эту проблему и почему вызывающий абонент вызывает RaisePropertyChanged("myFilterRadioButtonInt")
?
Edit:
Возвращаясь параметр в ConvertBack() была проблема. Вот мое решение:
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
bool val;
if (!bool.TryParse(value.ToString(), out val))
return 0;
int iParam;
if (!int.TryParse(parameter.ToString(), out iParam))
return 0;
return val ? iParam : 0;
}
RaisePropertyChanged ("myFilterRadioButtonInt"); не меняет значение _Filter.FilterMyProperty. Поместите конвертер. Бьюсь об заклад, конвертер меняет значение. – Paparazzi
@Blam добавил конвертер к вопросу. – RodMcKay
обычно вызывается только getter, в противном случае (если бы был вызван сеттер) было бы какое-то *** исключение StackOverflow ***, очевидно, что вызов в RaiffPropertyChanged в setter. Поэтому я сомневаюсь, что есть еще какой-то другой код, запускающий setter, а не 'RaisePropertyChanged()'. –