2016-11-03 2 views
0

В режиме MVVM WPF, у меня есть UserControl, как этотAccess userctrol не работает для меня

<UserControl MyControl> 
    <Grid> 
    <DataGrid 
     ItemsSource="{Binding MySource}"   
     Visibility = "{Binding the usercontrol's datacontext.UserGrade}" 
    /> 
    </Grid> 
</UserControl> 

В моей MainPageView я использую его как этот

<Window:MainPageView 
    xmlns:vm="clr-namespace:My.ViewModel" 
    xmlns:userCtl="clr-namespace:My.Controls" 
    <Window.DataContext> 
    <vm:MainPageViewModel/> 
    </Window.DataContext> 
    <userCtl:MyControl> 
    <userCtl:Mycontrol.DataContext> 
     <vm:MyControlViewModel/> 
    </userCtl:Mycontrol.DataContext> 
    <userCtl:MyControl> 
</Window:MainPageView> 

Теперь вот вопрос о том, как могу ли я получить доступ к файлу datacontext.UserVisiable для MyUserControl и привязан к видимости данных MyUserControl? Я попытался использовать {RelativeSource FindAncestor, AncestorType = {x: Тип UserControl}}, но это не сработало, или я сделал это неправильно? Благодаря!

+0

Вы хотите получить доступ к свойству 'Window', но используя' UserControl' в 'FindAncestor' ... почему? – Sinatr

+0

все в порядке, потому что моя модель просмотра имеет такое же свойство в baseviewmodel –

+0

Вы хотите получить доступ к файлу данных MyUserControl. У вас есть свойство Видимость на MyControlViewModel? – Liero

ответ

0

Вы можете попробовать это:

 <Grid> 
     <DataGrid ItemsSource="{Binding MySource}"  
        Visibility = "{Binding DataContext.UserGrade, RelativeSource={RelativeSource AncestorType=UserControl}}"/> 
    </Grid> 

Объяснение: Использование RelativeSource для Binding Source, позволяет перемещаться бросить дерево визуалов, к первому предку текущего контроля, указанного типа (UserControl). Затем он использует свойство UserControl.DataContext.UserGrade как свойство привязки.

Если Usercontrol.DataContext имеет значение null, привязка не будет работать. Как указано в вопросе, userControl имеет DataContext, который содержит это свойство.

Кроме того, вы можете попробовать установить AncestorType=location:MyControl, если UserControl недостаточно. (местоположение: это пространство имен, в котором находится ваш элемент управления)

+0

СПАСИБО Я пробовал это, но не работал –

+0

Вместо того, чтобы публиковать только какой-то код без комментариев, вы должны объяснить в своем ответе, почему он работает, и какие проблемы вы решили. – dymanoid

Смежные вопросы