我有一個問題,我無法創建一個用戶控件,該控件在父對象已將該對象設置爲數據綁定時使用自定義對象的屬性。將UserControl綁定到它自己的dependencyProperty不起作用
嘗試解釋我的意思是這裏的代碼。 自定義對象:
public class MyObj
{
public string Text { get; set; }
public MyObj(string text)
{
Text = text;
}
}
用戶控制代碼背後:
/// <summary>
/// Interaction logic for MyControl.xaml
/// </summary>
public partial class MyControl : UserControl
{
public static readonly DependencyProperty ObjectProperty =
DependencyProperty.Register("Object", typeof (MyObj), typeof (MyControl), new PropertyMetadata(default(MyObj)));
public MyObj Object
{
get { return (MyObj) GetValue(ObjectProperty); }
set { SetValue(ObjectProperty, value); }
}
public MyControl()
{
InitializeComponent();
}
}
用戶控制XAML:
<UserControl x:Class="Test.MyControl"
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="300" d:DesignWidth="300" DataContext="{Binding RelativeSource={RelativeSource Self}}">
<TextBlock Text="{Binding Object.Text}"/>
因此,所有我希望是MyControl顯示與一個TextBlock顯示任何字符串在MyObj.Text中的文本;
如果我在代碼中添加控件,沒有任何綁定,那麼這個工程就可以了。
MyControl myControl = new MyControl(){ Object = new MyObj("Hello World!") };
grid.Children.Add(myControl);
但是,如果我嘗試使用數據綁定這不顯示任何東西,這裏是MainWindow的代碼。
代碼隱藏:
public partial class MainWindow : Window, INotifyPropertyChanged
{
private MyObj _Object;
public MyObj Object
{
get { return _Object; }
set
{
_Object = value;
OnPropertyChanged("Object");
}
}
public MainWindow()
{
InitializeComponent();
Object = new MyObj("HELLO");
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
XAML:
任何人都可以點我在正確的方向,我想這是與使用相對源上的用戶控件綁定,但我米不確定。
感謝
啊完美的,那出色的作品。我從未使用ElementName,然後從現在開始將它提交到內存中。謝謝你 –
Upvote爲「輸出窗口」提示。 – Anthony