我有一个与问题绑定的控件,该问题有很多可能的选项。每个选项都可以有响应。
示例:
问题:它适合放在鞋盒里吗?
选项:是,否,可能
回复:
options[0].Response = new Response()
- 意思是第一个选项有响应,因此已经回答了......
对于这种情况,我使用复选框表示了这一点。如果选中它,它会被回答,如果没有,则响应为空。我希望这能使我的意图明确。
然而,我遇到了绑定问题,因为我无法获得该选项的响应。我以为我能够使用转换参数,但这似乎不起作用..
这就是我绑定到复选框的方式:
<CheckBox Content="{Binding Text}"
IsChecked="{Binding Response,
Mode=TwoWay,
Converter={StaticResource isQuestionResponseNullConverter},
ConverterParameter={Binding Response}}"
/>
所以这是带有我的值转换器的CheckBox,它使用以下方式工作:
public object Convert(object value, Type targetType, object parameter, string language)
{
IResponse response = (IResponse )value;
if (response== null)
{
false;
}
return true;
}
但是,我想使用ConvertBack
方法绑定回来,这样如果选中该复选框,该问题的响应的绑定将是CheckBox的绑定上下文的绑定。我以为我可以使用上面的XAML中所示的Converter Parameter来做到这一点,但是看起来参数是null,我这样做错了吗?
我已经阅读过这篇文章了,有些消息来源说要求使用DependencyObject,但我不明白为什么会这么说,那肯定是转换器的用途?
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
if ((bool)value == true)
{
return parameter; //<-- Always null..
}
else
{
return null;
}
}
答案 0 :(得分:1)
转换器应该是:
public class isQuestionResponseNullConverter : DependencyObject, IValueConverter
{
public object Parameter
{
get { return (object)GetValue(ParameterProperty); }
set { SetValue(ParameterProperty, value); }
}
public static readonly DependencyProperty ParameterProperty =
DependencyProperty.Register("Parameter", typeof(object), typeof(isQuestionResponseNullConverter), new PropertyMetadata(null));
public object Convert(object value, Type targetType, object parameter, string language)
{
IResponse response = (IResponse)value;
if (response == null)
{
return false;
}
return true;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
if ((bool)value == true)
{
return Parameter; //Get Parameter
}
else
{
return null;
}
}
}
在XAML中
<Page.Resources>
<local:isQuestionResponseNullConverter x:Key="isQuestionResponseNullConverter" Parameter="{Binding Response}"/>
</Page.Resources>
<Grid x:Name="Grid_Master" Background="Red">
<CheckBox VerticalAlignment="Top" Content="{Binding Text}"
IsChecked="{Binding Response, Mode=TwoWay, Converter={StaticResource isQuestionResponseNullConverter}}"/>
</Grid>
现在在back方法中你得到参数!
我希望您觉得它易于使用且有用