views:

327

answers:

0

Hi, I was trying to achieve master-detail with 2 ListBox, 2 DomainDataSource and a IValueConverter, when entering the page it throws the random error it does when your xaml is invalid: "AG_E_PARSER_BAD_PROPERTY_VALUE [Line: 24 Position: 61]"

Which is in fact the start position of where I am binding the listbox selected item with converter to the parameter's value of my DomainDataSource. I would love to achieve this by pure xaml, I did it by code behind and that works but I don't like it :p

When the parameter is a hard-coded integer 1, it works, so I assume it's the value binding

My code is below here, thanks in advance for at least looking :) (taken into account all the xmlns's & usings are correct)

Xaml:

<Grid x:Name="LayoutRoot">
    <Grid.Resources>
        <helpers:ListItemtoIdListValueConverter x:Key="mListConverter" />
    </Grid.Resources>
    <riacontrols:DomainDataSource x:Name="GetLists" DomainContext="{StaticResource DbContext}" LoadSize="20" QueryName="GetLists" AutoLoad="True" />
    <riacontrols:DomainDataSource x:Name="GetListItems" DomainContext="{StaticResource DbContext}" LoadSize="20" QueryName="GetListItemsById" AutoLoad="True">
        <riacontrols:DomainDataSource.QueryParameters>
            <riadata:Parameter ParameterName="id" Value="{Binding ElementName=ListBoxLists, Path=SelectedItem, Converter={StaticResource mListConverter}}" />
        </riacontrols:DomainDataSource.QueryParameters>
    </riacontrols:DomainDataSource>
    <activity:Activity IsActive="{Binding IsBusy, ElementName=ListBoxListItems}">
        <StackPanel Orientation="Horizontal">
            <ListBox x:Name="ListBoxLists" ItemsSource="{Binding Data, ElementName=GetLists, Mode=OneWay}" Width="150" Margin="0,0,10,10" />
            <ListBox x:Name="ListBoxListItems" ItemsSource="{Binding Data, ElementName=GetListItems, Mode=OneWay}" Width="150" Margin="0,0,10,10" />
        </StackPanel>
    </activity:Activity>
</Grid>

IValueConverter:

public class ListItemtoIdListValueConverter: IValueConverter
{
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        list mList = (list)value;
        if (mList != null)
            return mList.id;
        else
            return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    #endregion
}

Continued testing I found that when adding the Binding Element line to a TextBlock, that it is in fact a valid binding(xaml below). Does this mean that it may be a problem with the order of loading the objects?

<Grid x:Name="LayoutRoot">
    <Grid.Resources>
        <helpers:ListItemtoIdListValueConverter x:Key="mListConverter" />
    </Grid.Resources>
    <riacontrols:DomainDataSource x:Name="GetLists" DomainContext="{StaticResource DbContext}" LoadSize="20" QueryName="GetLists" AutoLoad="True" />
    <riacontrols:DomainDataSource x:Name="GetListItems" DomainContext="{StaticResource DbContext}" LoadSize="20" QueryName="GetListItemsById" AutoLoad="True">
        <riacontrols:DomainDataSource.QueryParameters>
            <riadata:Parameter ParameterName="id" Value="1" />
        </riacontrols:DomainDataSource.QueryParameters>
    </riacontrols:DomainDataSource>
    <activity:Activity IsActive="{Binding IsBusy, ElementName=ListBoxListItems}">
        <StackPanel>
            <StackPanel Orientation="Horizontal">
                <ListBox x:Name="ListBoxLists" ItemsSource="{Binding Data, ElementName=GetLists}" Width="150" Margin="0,0,10,10" />
                <ListBox x:Name="ListBoxListItems" ItemsSource="{Binding Data, ElementName=GetListItems}" Width="150" Margin="0,0,10,10" />
            </StackPanel>
            <TextBlock Text="{Binding ElementName=ListBoxLists, Path=SelectedItem, Converter={StaticResource mListConverter}}" />
        </StackPanel>
    </activity:Activity>
</Grid>