ユーザー コントロールを List<> にバインドするのに少し問題があります。次のようなことをしようとするとうまくいきます:
public string Map
{
get { return (string)GetValue(MapProperty); }
set
{
SetValue(MapProperty, value);
}
}
public static readonly DependencyProperty MapProperty =
DependencyProperty.Register(
"Map",
typeof(string),
typeof(GamePane),
new PropertyMetadata(
"Unknown",
ChangeMap)
);
ただし、文字列、int、float など以外のプロパティを使用しようとすると、「メンバー 'プロパティ名' が認識されないか、アクセスできません」というメッセージが表示されます。例:
public List<string> Players
{
get { return (List<string>)GetValue(PlayersProperty); }
set
{
SetValue(PlayersProperty, value);
}
}
public static readonly DependencyProperty PlayersProperty =
DependencyProperty.Register(
"Players",
typeof(List<string>),
typeof(GamePane),
new PropertyMetadata(
new List<string>(),
ChangePlayers)
);
タイプ以外のコードはまったく同じです。
BindableList を使用する必要があるかもしれないことを確認しましたが、これは Windows 8 プロジェクトには存在しないようです。
誰かが私を適切な方向に向けるか、別のアプローチを教えてくれますか?
編集: リクエストにより、文字列リストをバインドしようとするリスト ビューの XAML:
<ListView x:Name="PlayerList" SelectionMode="None" ScrollViewer.HorizontalScrollMode="Disabled" ScrollViewer.VerticalScrollMode="Disabled" ItemsSource="{Binding Players}"
ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled" Margin="6,-1,0,0" IsHitTestVisible="False">
次に、メイン ビューで GridView を描画します。これにより、バインディングが作成され、例外があります。
<GridView
x:Name="currentGames"
AutomationProperties.AutomationId="ItemsGridView"
AutomationProperties.Name="Items"
TabIndex="1"
Padding="12,0,12,0"
ItemsSource="{Binding Source={StaticResource itemsViewSource}}"
SelectionMode="None"
IsSwipeEnabled="false" Grid.Row="1" Margin="48,-20,0,0" Height="210" VerticalAlignment="Top" >
<GridView.ItemTemplate>
<DataTemplate>
<local:GamePane Map="{Binding Map}" Time="{Binding TimeRemaining}" Players="{Binding Players}"/>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
興味深いことに、この XAML は Visual Studio のデザイナーと Blend のデザイナーの両方を壊しますが、コードは実行されます。とはいえ、私のプレイヤーは表示されません。