0

データ オブジェクトを XamGrid にバインドしようとしています。ただし、グリッドは空白になります。これは Silverlight 4 では機能しましたが、Silverlight 5 では機能しなくなりました。コードを調べると、初期化後、グリッドにバインドされたデータ オブジェクトはデータと共に入力されても空白であることがわかります。

関連する.xamlは次のとおりです

<custCtrls:TcGroupBox Header="Users" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Grid.Row="0">
        <ContentControl>
            <ig:XamGrid x:Name="igUsersGrid" AutoGenerateColumns="False" ColumnWidth="Auto" Height="159" ItemsSource="{Binding Users.Rows, Mode=TwoWay}"  SelectedRowsCollectionChanged="igUsersGrid_SelectedRowsCollectionChanged" Loaded="igUsersGrid_Loaded">
                <ig:XamGrid.RowSelectorSettings>
                    <ig:RowSelectorSettings EnableRowNumbering="False" Visibility="Visible" />
                </ig:XamGrid.RowSelectorSettings>
                <ig:XamGrid.SelectionSettings>
                    <ig:SelectionSettings RowSelection="Single" ColumnSelection="None" CellSelection="None" CellClickAction="SelectRow"/>
                </ig:XamGrid.SelectionSettings>
                <ig:XamGrid.Columns>
                    <ig:TextColumn Key="UserName" HeaderText="UserName" Width="165" MinimumWidth="{StaticResource DefaultMinimumColWidth}" />
                    <ig:TextColumn Key="FirstName" HeaderText="FirstName" Width="165" MinimumWidth="{StaticResource DefaultMinimumColWidth}" />
                    <ig:TextColumn Key="LastName" HeaderText="LastName" Width="165" MinimumWidth="{StaticResource DefaultMinimumColWidth}" />
                    <ig:TemplateColumn Key="Phone" HeaderText="Phone" Width="115" IsReadOnly="True" MinimumWidth="{StaticResource DefaultMinimumColWidth}" >
                        <ig:TemplateColumn.ItemTemplate>
                            <DataTemplate>
                                <ig:XamMaskedEditor Value="{Binding Phone, Mode=TwoWay}" Mask = "(###)###-####" ValidationMode="LostFocus" IsReadOnly="True" Template="{StaticResource XamMaskedEditorControlTemplate1}"/>
                            </DataTemplate>
                        </ig:TemplateColumn.ItemTemplate>
                    </ig:TemplateColumn>
                    <ig:TextColumn Key="Email" HeaderText="Email" Width="160" MinimumWidth="{StaticResource DefaultMinimumColWidth}" />
                    <ig:TextColumn Key="RoleName"  HeaderText="RoleName" Width="160" MinimumWidth="{StaticResource DefaultMinimumColWidth}" />
                    <ig:TextColumn Key="UserId" Visibility="Collapsed" />
                    <ig:TextColumn Key="RoleId" Visibility="Collapsed" />
                </ig:XamGrid.Columns>
            </ig:XamGrid>                       
        </ContentControl>
    </custCtrls:TcGroupBox>

どこ

xmlns:ig="http://schemas.infragistics.com/xaml" 

関連する.csコードは次のとおりです

public bool InitializeView(Object viewData)
    {
        _bInitializingControls = true;
        UserControlData data = viewData as UserControlData;

        _dsoUserMgmt = data.ControlData as dsoUserMgmt;
        LayoutRoot.DataContext = _dsoUserMgmt;

        ShowDefaultForm();
        InitializeMenuBar();

        //Initialize menu and toolbar and show default form
        GetUserRoleNames();

        _dsoUserMgmt.Modified = false;

        if (_SelectedUserId > 0)
            SelectUserGridRow(_SelectedUserId);
        _bInitializingControls = false;
        return true;
    }

これは doUserMgmt.cs オブジェクトのスニペットです

public class dsoUserMgmt : dsoBaseDataSet
{
    protected dtoUsers _Users = new dtoUsers();

    [DataMember]
    public dtoUsers Users
    {
        get { return _Users; }

        set
        {
            Delete(_Users);
            _Users = value;
            Add(_Users);
        }
    }
}

InitializeView() で次の行にヒットしたときにコードをトレースすると

LayoutRoot.DataContext = _dsoUserMgmt;

次に get を呼び出して _Users を返しますが、3 回呼び出します。最初の 2 つはデータを含み、3 番目の呼び出しは null を返します。その後、DataContect、つまりグリッドは空になります。

何が起こっているかについてのアイデアはありますか?これは、同じ方法で設定された別のグリッドで機能し、これは Silverlight 4 で機能していました。次のリンクを見つけましたが、役に立ちませんでした (ただし、将来的に発生する可能性のある問題に光を当てます)。

Silverlight 5 のバインディング バグ?

Silverlight データ バインディング

4

0 に答える 0