0

我有一个可以在一页上工作的双向绑定。我将通过包含声明代码(不完整)来展示数据如何到达那里。

<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个问题

  1. 如何让图像以双向模式绑定到 Windows 数据上下文。

  2. 通过在 ViewModel 中设置 Datacontext,我从一开始就做错了吗?

  3. 有没有更好的方法将 ViewModel 从窗口/页面传递到窗口/页面?

谢谢你的期待。

4

2 回答 2

1

您的代码的问题是在视图模型中,您没有在新窗口myImage中绑定的任何属性。Image因此,为了使绑定工作在您SelectedItem的项目中创建一个类似项目类型的属性并将其绑定到它,例如:itemslistviewmodellistview

<ListView x:Name="mylvw" 
          DataContext="{StaticResource ResourceKey=myList}"
          ItemsSource="{Binding Path=myItems}"
SelectedItem = "{Binding SelectedItem}"

现在,由于您已将DataContext新窗口的设置为当前视图模型,因此您可以将Image新窗口上的

<Image x:Name="myImage" 
       Source="{Binding Path=SelectedItem.myImage}"/>
于 2013-09-22T14:41:20.257 回答
0

所以我设法通过更改问题页面上的图像绑定来解决这个问题,并保持我原来的设置。

<Image
    DataContext="{Binding DataContext, ElementName=myPage, Mode=TwoWay}"
    Source="{Binding Path=myModel.myImage}" />

这给了我正在寻找的双向绑定。

于 2013-09-24T19:38:51.653 回答