привязка к пользовательскому контролю не работает - PullRequest
0 голосов
/ 11 февраля 2012

Я столкнулся с проблемой привязки данных, поэтому я создаю usercontrole

UserControl1.xaml.cs

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        InitializeComponent();
    }
    public static DependencyProperty TestThisProperty = DependencyProperty.Register
        (
        "TestThis",
        typeof(string),
        typeof(UserControl1),
        new PropertyMetadata("Some Data",new PropertyChangedCallback(textChangedCallBack))
        );
    public string TestThis
    {
        get { return (string)GetValue(TestThisProperty); }
        set { SetValue(TestThisProperty, value); }
    }
    static void textChangedCallBack(DependencyObject property, DependencyPropertyChangedEventArgs args)
    {
        UserControl1 _us = (UserControl1)property;

        _us.MyUserControl.TestThis = (string)args.NewValue;

    }
}

UserControl1.xaml

<UserControl x:Class="WpfApplication1.UserControl1"
         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"  x:Name="MyUserControl"

         d:DesignHeight="300" d:DesignWidth="300">
          </UserControl>

MainWindow.xaml.cs

public partial class MainWindow : Window
{
    UserControl1 _uc = new UserControl1();

    public MainWindow()
    {
        InitializeComponent();
        DispatcherTimer _dt = new DispatcherTimer();
        _dt.Interval = new TimeSpan(0, 0, 1);
        _dt.Start();
        _dt.Tick += new EventHandler(_dt_Tick);
    }
    private void _dt_Tick(object s,EventArgs e)
    {
        _uc.TestThis = DateTime.Now.ToString("hh:mm:ss");

    }

и, наконец, MainWindow.xaml

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication1"
    Title="MainWindow" Height="350" Width="525">

<Grid>
    <TextBox Text="{Binding Path=TestThis,ElementName=MyUserControl, UpdateSourceTrigger=PropertyChanged}"/>

  </Grid>

но проблема здесь, когда я отлаживаю свой код, я получаю это предупреждение Не удается найти источник для привязки со ссылкой 'ElementName = MyUserControl' . и пользовательский интерфейс не обновляет, конечно, любая идея, пожалуйста?

1 Ответ

3 голосов
/ 11 февраля 2012

ElementName предназначается только для имен в одном и том же namescope , например,

<TextBox Name="tb"/>
<Button Content="{Binding Text, ElementName=tb}"/>

Если вы не определили UserControl в MainWindow XAML и не дали ему имя там или зарегистрируйте имя в коде позади (и нацеливайтесь на него), вы не получите эту ElementName привязку к работе.

Альтернативой может быть предоставление usercontrol как свойства в MainWindow,например,

public UserControl1 UC { get { return _uc; } }

Тогда вы можете связать это так:

{Binding UC.TestThis, RelativeSource={RelativeSource AncestorType=Window}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...