Предположим, что у меня есть пользовательский контроль test1.xaml и имеет frame frame frame frame. На моем втором пользовательском элементе управления, как мне ссылаться на test1.xaml в моем test2.xaml, чтобы управлять свойством элемента управления в test2.xaml.cs? Потому что я знаю, что test1 test = new test1(); не будет работать, потому что я не создавал экземпляр и не ссылался на него. Могу я спросить, как?Как получить доступ к элементам управления из другого класса?
ответ
Хорошо. Я не буду писать код с DependencyProperties, потому что он пахнет. Я напишу вместо этого простой код, который делает такие вещи, используя MVVM. Но я хочу отметить, что Джош Смит должен прочитать статью «Приложения WPF с шаблоном проектирования Model-View-ViewModel». Вот простой код, который содержит одно главное окно и два пользовательских элемента управления Test1 и Test2. И только один ViewModel - GodViewModel, который является viewModel для Test1 и Test2. На самом деле, как правило, имеется отображение 1-1 между ViewModel и View. Для простоты я создал только один ViewModel.
Код окна:
<Window x:Class="WpfApplication99.MainWindow"
x:Name="GodWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:view="clr-namespace:WpfApplication99.View"
Title="MainWindow"
xmlns:local="clr-namespace:WpfApplication99"
DataContext="{Binding Vm, ElementName=GodWindow}">
<StackPanel>
<view:Test1 />
<view:Test2 />
</StackPanel>
</Window>
public partial class MainWindow : Window
{
ViewModel.GodViewModel _vm = new ViewModel.GodViewModel();
public ViewModel.GodViewModel Vm
{
get { return _vm; }
set { _vm = value; }
}
public MainWindow()
{
InitializeComponent();
}
}
Код ViewModel:
namespace WpfApplication99.ViewModel
{
public class GodViewModel
{
public string Text { get; set; }
}
}
test1 код (код за пустой):
<UserControl x:Class="WpfApplication99.View.Test1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" d:DesignHeight="45" d:DesignWidth="167">
<Button Content="{Binding Text}"
Height="26"
Name="button1"
Width="144" />
</UserControl>
test2 код (код за пустой) :
<UserControl x:Class="WpfApplication99.View.Test2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" >
<TextBox Text="{Binding Text}" Height="69" Width="232" />
</UserControl>
Используя этот код, вы можете использовать одно и то же свойство Текст как в Test1, так и Test2. В вашем вопросе вы написали, что у вас есть свойство в test1 и хотите использовать его в test2. Итак, представьте, что предоставленное решение просто поместило одно свойство test1 в текст в GodViewModel. Возможно, вы хотите использовать его в коде позади. В этом случае вы должны создать отдельный элемент управления ViewModel для test1 и test2. Я не могу описать все детали там. Итак, прочитайте статью. Я уверен, что шаблон MVVM является ключевым в WPF.
Вы можете добавить DependencyProperty типа YourViewModelBase к вашему test2. Затем напишите в том месте, где вы создаете экземпляр своих элементов управления. Конечно, если вы используете MVVM. Однако, насколько я понимаю, вы не должны так поступать в соответствии с MVVM. , если у вас нет YourViewModelBase, вы можете создать абстрактный класс для вашего теста1 с необходимыми свойствами или просто пройти test1 как UserControl, а затем попытаться передать его test1 в свой код test2.
Привет, спасибо за ваш ответ. вы могли бы привести пример кода для реализации этого –
В подходе MVVM оба представления/пользовательские элементы управления могут использовать одну и ту же модель представления, к которой привязаны данные. Теперь, когда первый элемент управления вызывает изменение значения в одном из свойств, выставленных этой моделью просмотра, это автоматически отражается во втором пользовательском элементе управления.
Я не уверен, что я уже использую MVVM, но я уже разделял файлы в соответствии с их папками. Я пытаюсь реализовать MVVM. –
- 1. Как получить доступ к элементам управления winform из другого потока?
- 2. Доступ к элементам управления из другого потока
- 3. Как получить доступ к элементам управления формы из класса C#
- 4. Доступ к элементам управления из класса реализации
- 5. Как получить доступ к элементам формы из другого класса
- 6. доступ к элементу управления из другого класса
- 7. Как получить доступ к элементу управления ImageButton из другого класса?
- 8. Как получить доступ к элементам управления asp в файле класса
- 9. Как получить доступ к элементам другого макета?
- 10. C# Как изменить/получить доступ к элементам управления WinForms из другого класса
- 11. Как я могу получить доступ к этим элементам управления из другого класса?
- 12. Как получить доступ к элементам управления из MainWindow?
- 13. Как получить доступ к члену другого класса из класса?
- 14. Доступ к нескольким элементам управления формы из класса сразу
- 15. Как получить доступ к элементам указателя класса
- 16. Доступ к элементам управления страницы из отдельного класса
- 17. Доступ к элементам управления, созданным CreateChildControls()
- 18. Доступ к элементам управления пользовательского интерфейса из другого потока
- 19. Доступ к элементам класса
- 20. C# Доступ к элементам управления из внешнего класса без «public»
- 21. Доступ к элементам пользовательского интерфейса из другого класса C++
- 22. Как получить доступ к элементам listView из другого окна
- 23. Как получить доступ к элементам управления адаптерами из активности?
- 24. Как получить доступ к элементам управления WPF из фонового потока
- 25. Как получить доступ к элементам управления C# из статических классов?
- 26. Как получить доступ к элементам управления telerik из радиолокатора telerik
- 27. Как я могу получить доступ к другим элементам управления окном
- 28. Невозможно получить доступ к элементам класса R
- 29. Как получить доступ к элементам управления внутри управления репитером asp
- 30. Как получить доступ к элементам управления XAML из класса, отличного от основного частичного класса?
Спасибо за ваше время и исходный код! Я оценил это –