2013-09-22 4 views
0

У меня есть привязка twoway, которая работает на одной странице. Я покажу, как данные попадают туда, включая код декларации (не полный).WPF - привязка TwoWay к изображению

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

Так я нажимаю на элемент в ListView и заселяет изображение с сохраненным изображением, и я могу изменить изображение, используя 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}"/> 

Связывание не работает вообще ... нет изображения отображаются. Так я устал, чтобы указать TwoWay в DataContext следующим образом:

<Image x:Name="myImg" 
     DataContext="{Binding myImage, RelativeSource={RelativeSource FindAncestor, 
     AncestorType={x:Type Window}}, TwoWay}" 
     Source="{Binding Path=myImage}"/> 

Я попытался это как способ репликации, который работает. Это также не связывает вообще, то есть изображение не отображается.

Поэтому у меня есть 3 вопроса

  1. Как я могу получить изображение, чтобы привязать к окнам DataContext в режиме TwoWay.

  2. Я делаю это все неправильно с самого начала, установив Datacontext в ViewModel?

  3. Есть ли лучший способ пропускать ViewModels из окна/страницы в окно/страницу?

Спасибо в ожидании.

+0

Если я не ошибаюсь, использование режима «TwoWay» для большого «изображения» в этом случае может быть проблемой с производительностью. –

ответ

0

так мне удалось решить эту проблему путем изменения образа связывания на странице проблемы и сохранить свой первоначальный набор вверх.

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

Это дает мне привязку TwoWay, которую я искал.

0

Проблема с вашим кодом находится в поле зрения у вас нет свойства myImage, которому вы связали свой Image в новом окне. Поэтому для того, чтобы сделать привязку работы создать свойство как SelectedItem типа пункта в itemslist на вашем viewmodel и свяжите listview ему нравится:

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

Теперь, так как вы установили DataContext вашего нового окна в настоящее время ViewModel, так что вы можете связать Image на новом окне, как

<Image x:Name="myImage" 
     Source="{Binding Path=SelectedItem.myImage}"/> 
Смежные вопросы