Привязка к свойствам вне текста данных - PullRequest
0 голосов
/ 26 июля 2010

Я создаю приложение WPF, и у меня возникли небольшие трудности с реализацией идеи пользовательского интерфейса, которая у меня есть.

У меня есть MasterViewModel, привязанный к MainWindow, который предоставляет наблюдаемую коллекцию ViewModels. Я написал несколько команд, которые по существу переключают текущую модель представления в наблюдаемую коллекцию, и это впоследствии отображает соответствующее представление. Однако, когда приложение загружается впервые, я добавляю HomeViewModel в коллекцию, которая показывает вид Home (Navigation). Проблема, с которой я сталкиваюсь, заключается в том, что команды, с которыми я связываюсь, выставлены на MasterViewModel, поэтому они не «каскадно» попадают в элемент управления. Кто-нибудь может предложить решение или лучшее? Большое спасибо.

Это ошибка, которую я получаю:

Ошибка System.Windows.Data: 40:
Ошибка пути BindingExpression:
Свойство 'MainWindowViewModel' не найдено в объекте '' HomeViewModel '(HashCode = 5313339)'. BindingExpression: Path = MainWindowViewModel.LoadClientsCommand;
DataItem = 'HomeViewModel' (HashCode = 5313339);
Целевым элементом является «Кнопка» (Имя = '');
целевое свойство 'Command' (тип 'ICommand')

Ответы [ 2 ]

2 голосов
/ 26 июля 2010

Я полагаю, что вы можете получить доступ к командам в DataContext вашего MasterViewModel через RelativeSource следующим образом:

<Button>
    <Button.Command>
        <Binding Path="DataContext.MasterViewCommand">
            <Binding.RelativeSource>
                <RelativeSource
                    Mode="FindAncestor"
                    AncestorType="{x:Type MasterViewBaseClass}"
                />
            </Binding.RelativeSource>
        </Binding>
    </Button.Command>
    Click me!
</Button>
1 голос
/ 26 июля 2010

Можете ли вы предоставить примеры кода для своего сценария кода?

  1. Это напоминает мне пример MVSM Джоша Смита (http://msdn.microsoft.com/en-us/magazine/dd419663.aspx), mb, у вас есть идея?
  2. Если я вас правильно понимаю: почему вы не пишете виртуальную машину для ItemControl и вводите туда свои команды?
  3. Вы можете попытаться получить доступ к командам из вашего ItemControl через RelativeSource ( Как мнеиспользовать привязки WPF с RelativeSource? )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...