データ オブジェクトを 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 で機能していました。次のリンクを見つけましたが、役に立ちませんでした (ただし、将来的に発生する可能性のある問題に光を当てます)。