2012-02-11 55 views
-1

我曾經遇到過一個數據綁定probleme, 所以我創建了一個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> 

主窗口。 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"); 

    } 

和finaly的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> 

但這裏的問題,whene調試我的代碼,我得到這樣的警告 無法爲參照 '的ElementName =的MyUserControl'結合找到來源。和ui當然不更新,請任何想法?

回答

3

ElementName僅針對相同namescope的名稱,例如,

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

如果你沒有在MainWindow XAML定義用戶控件和代碼給它一個名稱有或register a name背後(和目標是),你不會得到這個ElementName結合工作。

另一種方法是將用戶控件暴露爲主窗口上的屬性,例如,

public UserControl1 UC { get { return _uc; } } 

然後你可以綁定像這樣:

{Binding UC.TestThis, RelativeSource={RelativeSource AncestorType=Window}} 
+0

感謝您的時間,這一招解決我的問題 – user1202382 2012-02-11 16:18:06