使用 ValueConverter 绑定 - ConvertBack 参数始终为 null
Binding using ValueConverter - ConvertBack Parameter always null
我有一个绑定到问题的控件,该问题有很多可能的选项。每个选项都可以有一个响应。
示例:
Question: Will it fit in a shoe box?
Options: Yes, No, Maybe
Response: options[0].Response = new Response()
- Meaning that the first option has a response, therefore it has been answered...
对于这种情况,我使用复选框表示。如果选中,则回答,如果没有,则响应为空。我希望这能说明我的意图。
但是我在绑定方面遇到了问题,因为我无法将响应输入到选项中。我以为我可以使用转换参数,但这似乎也不起作用..
这就是我绑定到复选框的方式:
<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 中所示的转换器参数来执行此操作,但是该参数似乎为空,我做错了吗?
我已阅读此内容,一些消息来源说需要 DependencyObject,但我不明白为什么,这肯定是 ConvertBack 的用途?
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
if ((bool)value == true)
{
return parameter; //<-- Always null..
}
else
{
return null;
}
}
转换器应该是:
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>
现在在后面的方法中你得到了参数!
希望您觉得它易于使用且有用
我有一个绑定到问题的控件,该问题有很多可能的选项。每个选项都可以有一个响应。
示例:
Question: Will it fit in a shoe box?
Options: Yes, No, Maybe
Response:
options[0].Response = new Response()
- Meaning that the first option has a response, therefore it has been answered...
对于这种情况,我使用复选框表示。如果选中,则回答,如果没有,则响应为空。我希望这能说明我的意图。
但是我在绑定方面遇到了问题,因为我无法将响应输入到选项中。我以为我可以使用转换参数,但这似乎也不起作用..
这就是我绑定到复选框的方式:
<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 中所示的转换器参数来执行此操作,但是该参数似乎为空,我做错了吗?
我已阅读此内容,一些消息来源说需要 DependencyObject,但我不明白为什么,这肯定是 ConvertBack 的用途?
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
if ((bool)value == true)
{
return parameter; //<-- Always null..
}
else
{
return null;
}
}
转换器应该是:
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>
现在在后面的方法中你得到了参数!
希望您觉得它易于使用且有用