2015-07-03 2 views
0

Привет я определил недвижимость в Мой BookViewVMКак связать родителя или другого ViewModel свойство в MVVM WPF

private Visibility _isLoaderPageView = Visibility.Hidden; 
    public Visibility IsLoaderPageView 
    { 
     get 
     { 
      return _isLoaderPageView; 
     } 
     set 
     { 
      _isLoaderPageView = value; 
      RaisePropertyChanged("IsLoaderPageView"); 
     } 
    } 

Я называю это bookViewVM на Page.xaml странице, но на какой-то другой Page.xaml PageViewVM уже связывают Но я должен назвать BookViewVM Property:

<views:LoadingAnimation x:Name="ldrControl" Margin="100,100,100,150" Visibility="{Binding IsLoaderPageView}" /> 

Я могу открыть BookViewVM собственности на моем Pageview.xaml.cs кода: ETBApp.MainVM.BookVM.IsLoaderPageView

Но я должен назвать это из привязки свойств на странице. , пожалуйста, скажите мне, как связать его.

Обе модели ViewModel, такие как BookViewVm и PageViewVm, на тех же самых именах.

+0

В MVVM каждая часть View должна иметь единую ViewModel. Если для вашего LoadingAnimation требуется это свойство, то это свойство должно быть в его ViewModel (задано через его свойство DataContext). Не можете ли вы перенести его с BookViewVM на PageViewVM? Или вывести свойство или весь BookViewVM через свойство в PageViewVM? – almulo

ответ

1

Проблема заключается в том, что у вас есть несколько DataContexts и по умолчанию Binding работы с DataContext текущего элемента, если он указан, и DataContext родителя, если нет (и так далее).

так есть 2 простых решений:

  • указать DataContext элемента непосредственно (только если этот элемент не имеет ни одного)
  • использование ElementName (если у вас есть доступ в XAML к определенному элементу и его необходимо называть должным образом через . Название или x: Название), или RelativeSource (Если привязать к какому-то предку) внутри Связывание с Путем
0

Просто установите правильно DataContext. Например, в сетке

<Grid.DataContext> 
    <viewmodel:YourViewModel /> 
</Grid.DataContext> 

И теперь вы можете связать это

<ItemsControl ItemsSource="{Binding Model.ButtonsRaw1}"> 

Там мы связываем ItemsSource из нашей модели.

Или у вас есть альтернативный способ сделать это из Ресурса. SOmething вот так

<UserControl.Resources> 
     <Style TargetType="local:YourType"> 
      <Setter Property="Text" Value="{Binding Path=DataContext.Model.Text, Mode=TwoWay,ElementName=YourGridName}"/> 
     </Style> 
</UserControl.Resources> 
Смежные вопросы