使用ValueConverter进行绑定 - ConvertBack参数始终为null

时间:2015-04-29 11:14:10

标签: c# xaml binding windows-phone-8.1

我有一个与问题绑定的控件,该问题有很多可能的选项。每个选项都可以有响应。

示例:

  

问题:它适合放在鞋盒里吗?

     

选项:是,否,可能

     

回复: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;
        }
    }

1 个答案:

答案 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方法中你得到参数!

我希望您觉得它易于使用且有用