我有一个可以在一页上工作的双向绑定。我将通过包含声明代码(不完整)来展示数据如何到达那里。
<Page.Resources>
<local:myViewModel x:Key="myList" />
</Page.Resources>
<ListView x:Name="mylvw"
DataContext="{StaticResource ResourceKey=myList}"
ItemsSource="{Binding Path=myItems}"
<Image DataContext ="{Binding SelectedItem,
ElementName=lvw,
Mode=TwoWay}"
Source="{Binding Path=myImage}" />
因此,我单击列表视图中的项目并使用存储的图像填充图像,并且我能够使用 TwoWay 绑定更改图像。
我的问题页面有不同的设置。我想在新窗口中显示选定的列表视图项(ViewModel)。我从 ViewModel 中的命令调用窗口并在那里设置窗口的 Datacontext:
class myViewModel: INotifyPropertyChanged
{
public ICommand OpenDetailsCommand
{
get { return new RelayCommand(OpenDetailsWindow); }
}
public void OpenDetailsWindow()
{
myWindow w = new myWindow();
w.DataContext = this;
w.Show();
}
所以我在这个窗口中没有资源,即 Window.Resource
我的图像如下:
<Image x:Name="myImage"
Source="{Binding Path=myImage}"/>
这显示了图像,但我无法使用绑定来更改编辑时的图像。如果我尝试:
<Image x:Name="myImg"
Source="{Binding Path=myImage, Mode=TwoWay}"/>
绑定根本不起作用......没有显示图像。所以我厌倦了通过以下方式在 Datacontext 中指定 TwoWay:
<Image x:Name="myImg"
DataContext="{Binding myImage, RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Window}}, TwoWay}"
Source="{Binding Path=myImage}"/>
我尝试将此作为复制有效方法的一种方式。这也根本不绑定,即不显示图像。
所以我有3个问题
如何让图像以双向模式绑定到 Windows 数据上下文。
通过在 ViewModel 中设置 Datacontext,我从一开始就做错了吗?
有没有更好的方法将 ViewModel 从窗口/页面传递到窗口/页面?
谢谢你的期待。