Получение MVVM ViewModel для привязки к представлению

StackOverflow https://stackoverflow.com/questions/2512268

  •  22-09-2019
  •  | 
  •  

Вопрос

У меня есть следующий код (измененные имена объектов, поэтому ошибки синтаксиса/орфографии игнорируют).

public class ViewModel
{
    ViewModelSource m_vSource;

    public ViewModel(IViewModelSource source)
    {
        m_vSource= source;
        m_vSource.ItemArrived += new Action<Item>(m_vSource_ItemArrived);
    }

    void m_vSource_ItemArrived(Item obj)
    {
        Title = obj.Title;
        Subitems = obj.items;
        Description = obj.Description;
    }

    public void GetFeed(string serviceUrl)
    {
        m_vFeedSource.GetFeed(serviceUrl);
    }

    public string Title { get; set; }
    public IEnumerable<Subitems> Subitems { get; set; }
    public string Description { get; set; }
 }

Вот код, который у меня есть в коде моей страницы.

ViewModel m_vViewModel;

public MainPage()
{
    InitializeComponent();

    m_vViewModel = new ViewModel(new ViewModelSource());
    this.Loaded += new RoutedEventHandler(MainPage_Loaded);

    this.DataContext = m_vViewModel;
}

void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    m_vViewModel.GetItems("http://www.myserviceurl.com");
}

Наконец, вот образец того, как выглядит мой XAML.

<!--TitleGrid is the name of the application and page title-->
<Grid x:Name="TitleGrid" Grid.Row="0">
    <TextBlock Text="My Super Title" x:Name="textBlockPageTitle" Style="{StaticResource PhoneTextPageTitle1Style}"/>
    <TextBlock Text="{Binding Path=Title}" x:Name="textBlockListTitle" Style="{StaticResource PhoneTextPageTitle2Style}"/>
</Grid>

Я здесь что -то делаю?

Это было полезно?

Решение

Я думаю, что ваш ViewModel должен реализовать интерфейс inotifypropertychanged:

    public virtual event PropertyChangedEventHandler PropertyChanged;
    protected virtual void RaisePropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

Тогда ваша собственность будет выглядеть так:

    private title;
    public string Title 
    { 
        get
        {
            return this.title;
        }

        set
        {
            if (this.title!= value)
            {
                this.title= value;
                this.RaisePropertyChanged("Title");
            }
        }
    }

Майкл

Другие советы

Что ж, иди, фигурируйте, через 10 минут после того, как я опубликую, я выясню это.

Я пропустил реализацию INOTIFYPORPERTY. Спасибо, если кто -то смотрит на это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top