RaisePropertyChange с холстом - PullRequest
       30

RaisePropertyChange с холстом

2 голосов
/ 31 января 2012

Я использую шаблон Prism для MVVM в своем приложении WP7. В моей ViewModel я реализовал два свойства:

private IconVO _selectedIcon;
public IconVO SelectedIcon {
   get {
       return _selectedIcon;
   }
   set {
       _selectedIcon = value;
       SelectedIconCanvas = _selectedIcon.Icon;
       RaisePropertyChanged(() => this.SelectedIcon);
   }
}

private Canvas _selectedIconCanvas;
public Canvas SelectedIconCanvas {
   get {
        return _selectedIconCanvas;
   }
   set {
       _selectedIcon = value;
       RaisePropertyChanged(() => this.SelectedIconCanvas);
   }
}

где IconVO (в нем хранится информация об одном значке, загруженном из некоторого файла XML):

public class IconVO {
   public string Name { get; set; }
   public Canvas Icon { get; set; }
} 

SelectedIcon в настоящее время выбран IconVO из ObservableCollection<IconVO> (коллекция привязана к ListPicker).

SelectedIconCanvas - это свойство, которое хранит Canvas из SelectedIcon.Icon.

Когда я выполняю этот код, приложение выдает ArgumentException -> неверный параметр в этой строке:

RaisePropertyChanged(() => this.SelectedIconCanvas);

Что не так с этим кодом?

Спасибо, fl4izdn4g

РЕДАКТИРОВАТЬ 01-02-2012

Вот XAML, как вы просили:

<Border Grid.Row="1" Background="{Binding SelectedColor}" >
  <ContentControl Margin="40,20,300,20" Content="{Binding SelectedIconCanvas}">
     <ContentControl.ContentTemplate>
        <DataTemplate>
           <ContentPresenter />
        </DataTemplate>
     </ContentControl.ContentTemplate>
  </ContentControl>    
</Border>

Я пытался заменить ContentControl на:

<Button Content="{Binding SelectedIconCanvas}"/>

но это не помогло.

Ответы [ 2 ]

0 голосов
/ 01 февраля 2012

У вас не должно быть элемента пользовательского интерфейса, упомянутого в модели представления в MVVM.Может быть, вы хотите сослаться на модель DataContext / view выбранного холста?

0 голосов
/ 01 февраля 2012

Просто поместите это:

private IconVO _SelectedIcon;
public IconVO SelectedIcon 
{
    get { return _SelectedIcon; }
    set 
    {
       _SelectedIcon = value;
       SelectedIconCanvas = _SelectedIcon.Icon;
       RaisePropertyChanged("SelectedIcon");
   }
}

private Canvas _SelectedIconCanvas;
public Canvas SelectedIconCanvas 
{
   get { return _SelectedIconCanvas; }
   set 
   {
       _SelectedIconCanvas = value;
       RaisePropertyChanged("SelectedIconCanvas");
   }
}

Извините, я изменил имена ваших свойств (у меня есть предпочтение C #)

...