我有一个嵌套在按钮内的图像
<ListBox>
<ListBox.ItemsSource>
<Binding Path="Peers"></Binding>
</ListBox.ItemsSource>
<ListBox.ItemTemplate>
<DataTemplate>
<ListBoxItem>
<Button x:Name="btn_InviteToPlay" Click="btn_InviteToPlay_Click">
<Button.Content>
<Image Source="{Binding GameStatus,Converter={StaticResource MyGameStatusToIconConverter}}" x:Name="img_invitation"></Image>
</Button.Content>
</Button>
</ListBoxItem>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
当我点击btn_InviteToPlay时,我尝试将图像的datacontext更改为游戏的实例,并将图像的源绑定到游戏的GameStatus属性。
private void btn_InviteToPlay_Click(object sender, RoutedEventArgs e)
{
Game game = new Game(){ GameStatus = GameStatus.Waiting};
img.DataContext = game;
}
此绑定不起作用,
首先,图像的DataContext最初是它的Ancestor的DataContext,我不想将它应用于Image。
我的问题是:
(1)如何在图像datacontext被赋予任何上下文之前应用默认值,同时忽略祖先的DataContext,因为图像嵌套在ItemsControl项中。
(2)一般来说,我无法为当前的DataContext应用绑定 (与游戏作为源和GameStatus作为路径绑定),所以我正在寻找正确的方法。
我相信要走的路是将每个图像绑定到默认的游戏实例。
我在标记中试图这样做: 在我的资源中:
<local:Game x:Key="DefaultGame" />
图片:
<Image Source="{Binding Source=DefaultGame,Path=GameStatus, Converter={StaticResource MyGameStatusToIconConverter}}" x:Name="img_invitation"></Image>
这不起作用,任何想法。 我还想在代码中这样做,但无法弄清楚如何 因为我所做的只是给包含面板它的datacontext,所有都来自那里。