2017-01-29 3 views
0

Я пытаюсь связать свойство внутри ViewModel содержащегося элемента управления, но кажется, что WPF не позволит мне привязываться к свойству. При попытке сделать это он сообщает об ошибке: ViewModel не поддерживается в проекте Windows Presentation Foundation (WPF).Привязка к модели зрения другого элемента управления

Есть ли способ привязать меня к объекту в ViewModel, используя XAML, или мне нужно выполнить все модификации ViewModel в коде?

Главное окно XAML:

<Window x:Class="MyNamespace.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:MyNamespace" 
    mc:Ignorable="d" 
    Title="MainWindow"> 
<Grid> 
    <!-- Error: Can't bind to ViewModel.MyValue --> 
    <local:UserControl1 ViewModel.MyValue="123"/> 
</Grid> 

класс управления пользователя:

public partial class UserControl1 :UserControl 
{ 
    public UserControl1() 
    { 
     InitializeComponent(); 

     ViewModel = new UserControlViewModel(); 
    } 

    public UserControlViewModel ViewModel 
    { 
     get 
     { 
      return (UserControlViewModel) GetValue(ViewModelProperty); 
     } 
     set 
     { 
      SetValue(ViewModelProperty, value); 
     } 
    } 

    public static readonly DependencyProperty ViewModelProperty = DependencyProperty.Register(nameof(ViewModel), typeof(UserControlViewModel), typeof(UserControl1), new PropertyMetadata(null)); 
} 

класс View Модель управления пользователя:

public class UserControlViewModel 
{ 
    public string MyValue 
    { 
     get; 
     set; 
    } 
} 
+1

Вы не можете получить доступ к вложенному свойству в XAML. –

ответ

1

Нет, вы не можете использовать XAML для установить вложенный ти свойства зависимостей элемента управления:

Can I use XAML to set a nested property (property of the value of a property) of a control?

Вы можете только установить значение самого свойства:

<local:UserControl1> 
    <local:UserControl1.ViewModel> 
     <local:UserControlViewModel MyValue="123" /> 
    </local:UserControl1.ViewModel> 
</local:UserControl1>