Хорошо.Я не буду писать код с DependencyProperties, потому что он пахнет.Вместо этого я напишу простой код, который делает такие вещи, используя MVVM.Но я хочу отметить, что вы должны прочитать статью «Приложения WPF с шаблоном дизайна Model-View-ViewModel» Джоша Смита.Вот простой код, который содержит одно главное окно и два пользовательских элемента управления Test1 и Test2.И только одна ViewModel - GodViewModel, которая является моделью представления для Test1 и Test2.Фактически, как правило, между ViewModel и View есть отображение 1-1.Я создал только одну 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>
Используя этот код, вы можете использовать одно и то же свойство Text в Test1 и Test2.В своем вопросе вы написали, что у вас есть свойство в test1 и вы хотите использовать его в test2.Итак, представьте, что предоставленное решение просто поместит одно свойство Text test1 в GodViewModel.Возможно, вы хотите использовать его в коде позади.В этом случае вам следует создать отдельную ViewModel для пользовательских элементов управления test1 и test2.Я не могу описать все детали там.Итак, пожалуйста, прочитайте статью.Я уверен, что шаблон MVVM - ключевая вещь в WPF.