0

1 つのページで動作する双方向バインドがあります。宣言コードを含めて、データがどのようにそこに到達するかを示します (完全ではありません)。

<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 の Command からウィンドウを呼び出し、そこに Window の 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. TwoWay モードでイメージを Windows データコンテキストにバインドするにはどうすればよいですか。

  2. ViewModelでDatacontextを設定することで、最初からこれをすべて間違っていますか?

  3. ビューモデルをウィンドウ/ページからウィンドウ/ページに渡すより良い方法はありますか?

期待していただきありがとうございます。

4

2 に答える 2

1

コードの問題は、新しいウィンドウでmyImageバインドしたプロパティがないビューモデルにあります。Imageしたがって、バインディングを機能させるにSelectedItemは、アイテムのタイプのようなプロパティを作成し、次のようにバインドitemslistします。viewmodellistview

<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}" />

これにより、探していた TwoWay バインディングが得られます。

于 2013-09-24T19:38:51.653 に答える