Именованные элементы управления Xaml не отображаются в CodeBehind - PullRequest
1 голос
/ 25 марта 2019

Я использую caliburn.micro в WPF. Хотя я установил x:Name для моего элемента (который находится в xaml), я не вижу элементов (кнопка, текстовое поле, сетка и т. Д.) В моем коде позади (в моей ViewModel). Как будто х: Имя является личным

Например:

<Button x:Name="mybutton">    
        <StckPanel Orientation="Horizontal">
                <Image Width="30" Source="/Resources/edit.png" />
                <TextBlock Margin="5" FontSize="15" Text="Update"> 
                </TextBlock>
        </StackPanel>
</Button>

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Вы не можете получить доступ к своим элементам XAML с именем в ViewModel.Вы можете получить доступ только к своим элементам XAML в коде только за файлом.Например, ваш XAML - MainWindow.xaml, тогда вы можете получить доступ к элементам XAML только в файле MainWindow.xaml.cs.Основная цель применения шаблона MVVM к проекту - сделать так, чтобы представление (xaml) и бизнес-логика (ViewModel) были слабо связаны.Подробнее о MVVM здесь .

1 голос
/ 26 марта 2019

X: Имя не предоставляет ваши View View для ViewModel, на самом деле, как справедливо заметил Клеменс, вы не должны пытаться получить доступ к View View from View Model.

Если вы собираетесьВызовите метод по нажатию кнопки (сверху xaml), используя соглашения Caliburn Micro, вы должны написать метод, соответствующий x: Name.Например,

public void mybutton()
{
  // Do something
}

Это будет вызывать mybutton() method каждый раз, когда нажимается ваша кнопка с x: Name mybutton.

...