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つの質問があります
TwoWay モードでイメージを Windows データコンテキストにバインドするにはどうすればよいですか。
ViewModelでDatacontextを設定することで、最初からこれをすべて間違っていますか?
ビューモデルをウィンドウ/ページからウィンドウ/ページに渡すより良い方法はありますか?
期待していただきありがとうございます。