Wpf 在数据模板中绑定图像

Wpf 在数据模板中绑定图像,wpf,mvvm,binding,datacontext,Wpf,Mvvm,Binding,Datacontext,我正在尝试向我的应用程序添加菜单,我希望我的菜单标题是当前连接的用户的图片 我的问题是,除了用于图像的绑定外,其他绑定都可以工作。根据我在网上的了解,我用来用图片替换菜单标题的数据模板无法访问其父数据上下文。我试图使用一些东西,比如相对源代码和其他技巧,但没有成功(当然与我是mvvm新手这一事实有关,我显然还有很多东西要学:) 以下是我使用的代码: <Grid DataContext="{Binding User}"> <DockPanel> &l

我正在尝试向我的应用程序添加菜单,我希望我的菜单标题是当前连接的用户的图片

我的问题是,除了用于图像的绑定外,其他绑定都可以工作。根据我在网上的了解,我用来用图片替换菜单标题的数据模板无法访问其父数据上下文。我试图使用一些东西,比如相对源代码和其他技巧,但没有成功(当然与我是mvvm新手这一事实有关,我显然还有很多东西要学:)

以下是我使用的代码:

<Grid DataContext="{Binding User}">
    <DockPanel>
        <Label Content="{Binding Strings.Hello, Source={StaticResource StringLocalizer} }" VerticalAlignment="Center" Padding="0,0,5,0" FontFamily="{DynamicResource Font_Normal}" FontSize="15" Foreground="White"/>
        <TextBlock Text="{Binding DisplayName, TargetNullValue='Guest', FallbackValue='Guest'}" VerticalAlignment="Center" HorizontalAlignment="Left" FontFamily="{DynamicResource Font_Normal}" FontSize="15" Foreground="White"/>


        <Menu Name="LogonMenu" Margin="10,0,0,0" DataContext="{Binding User}">
            <MenuItem >
                <MenuItem.HeaderTemplate>
                    <DataTemplate>
                        <!--<Image Source="{Binding Datacontext.Image,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Application}}, Converter={StaticResource ImageConverter}, FallbackValue={StaticResource DefaultUserIcon}}"/>-->
                        <Image DataContext="{Binding User}" Source="{Binding Path=Image, Converter={StaticResource ImageConverter}, FallbackValue={StaticResource DefaultUserIcon},Mode=TwoWay}"/>
                    </DataTemplate>
                </MenuItem.HeaderTemplate>

                <MenuItem Header="{Binding Strings.SignIn, Source={StaticResource StringLocalizer}}" Width="150" Margin="10,0,0,0" IsEnabled="{Binding Connected, Converter={StaticResource BoolInverterConverter}}" Visibility="{Binding RelativeSource={RelativeSource Mode=Self},Path=IsEnabled, Converter={StaticResource BoolToVisibilityConverter}}" Command="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=DataContext.SignInCommand}"/>
                <MenuItem Header="{Binding Strings.SignOut, Source={StaticResource StringLocalizer}}" Margin="10,0,0,0" IsEnabled="{Binding Connected}" Visibility="{Binding RelativeSource={RelativeSource Mode=Self},Path=IsEnabled, Converter={StaticResource BoolToVisibilityConverter}}" Command="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=DataContext.SignOutCommand}"/>
                <MenuItem Header="{Binding Strings.UserInformation, Source={StaticResource StringLocalizer}}" Margin="10,0,0,0" IsEnabled="{Binding Connected}" Visibility="{Binding RelativeSource={RelativeSource Mode=Self},Path=IsEnabled, Converter={StaticResource BoolToVisibilityConverter}}"/>
            </MenuItem>
        </Menu>
    </DockPanel>
</Grid>


在我的例子中,图像总是显示备用图片,如果有人能帮助我找到一种方法来获取用户的图片,那就太好了。

应该足够了,前提是
image
是字符串、Uri或ImageSource(或从ImageSource派生的类型)类型的公共属性。无需再次设置DataContext,也无需使用绑定转换器。设置模式=双向没有任何意义。谢谢你的回答,但即使我以这种方式更改图像定义,它也不起作用。如果我在我的菜单外的dockpanel中复制粘贴我的图像,图像将正确显示。请不要设置
DataContext=“{Binding User}”
,至少不要设置一次。每次执行此操作时,都会将新DataContext设置为当前DataContext中的属性用户,即User.User.User(如果执行三次)。DataContext是从父元素继承到子元素的,因此只能在某个顶级控件(例如主窗口)上设置一次。您好,通过删除datatemplate并通过以下方式定义我的标头来解决此问题: