XAML: привязать View к ViewModel из другого пространства имен - PullRequest
0 голосов
/ 08 июня 2018

Я уверен, что это основной вопрос, но я не могу понять, как это сделать.У меня есть View в одном пространстве имен и ViewModel в другом пространстве имен.Как мне связать эти два вместе?

My View находится в пространстве имен MyProject.View.Моя ViewModel находится в пространстве имен MyProject.ViewModel.

Как мне связать это в XAML?Я делаю это в UWP, но я предполагаю, что это то же самое, независимо от UWP / WPF / X.Forms.

<Page
  x:Class="MyProject.View.MainPage"
  xmlns:vm="using:MyProject.ViewModel"
  DataContext="{Binding MainPageViewModel, Source={StaticResource vm:MainPageViewModel}}"

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Согласно вашему описанию, я сделал пример кода для вашей справки:

enter image description here

public class MainViewModel:INotifyPropertyChanged
{
    private string _Name;

    public event PropertyChangedEventHandler PropertyChanged;

    public string Name
    {
        get { return _Name; }
        set
        {
            _Name = value;
            RaisePropertyChanged("Name");
        }
    }

    public MainViewModel()
    {
        this.Name = "Hello UWP!";
    }

    private void RaisePropertyChanged(string PropertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this,new PropertyChangedEventArgs(PropertyName));
        }
    }
}
<Page
x:Class="AppViewModel.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:AppViewModel"
xmlns:vm="using:AppViewModel.ViewModel"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

<Page.DataContext>
    <vm:MainViewModel></vm:MainViewModel>
</Page.DataContext>
<Grid>
    <TextBlock Text="{Binding Name}"></TextBlock>
</Grid>

0 голосов
/ 08 июня 2018

Полагаю, вы хотите сделать что-то подобное:

<Page x:Class="MyProject.View.MainPage" 
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    xmlns:VM="clr-namespace:MyProject.ViewModels">

    <Page.BindingContext>
        <VM:MainPageViewModel />
    </Page.BindingContext>

    <!-- content here -->

</Page>

Это создаст новый экземпляр вашего MainPageViewModel каждый раз, когда вы создаете новый MainPage.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...