我正在创建一个UserControl“UC”。我的班级有数据“AClass”。我希望这个类的对象是我的UserControl中的DP。所以我把这个定义放在UC中:
public static readonly DependencyProperty AProperty =
DependencyProperty.Register("A", typeof(AClass),
typeof(UC), new FrameworkPropertyMetadata(new AClass()));
public AClass A
{
get { return (AClass)GetValue(AProperty); }
set { SetValue(AProperty, value); }
}
以下是我在XAML中创建控件的方法:
xmlns:l="clr-namespace:MyWorkspace"
// ...
<Grid>
<l:UC Height="100" Width="150" Activity="{Binding a}" />
</Grid>
我在代码隐藏文件中定义了“a”:
public partial class MainWindow : Window
{
public AClass a {get; set;}
public MainWindow()
{
DataContext = this;
a = // create an object
InitializeComponent();
}
}
接下来,在我的UC中,我想引用“A”并使用其中一个属性:
private void DoSomethingInUC()
{
int size = A.AsProperty;
// ...
}
问题在于每次我引用“A”时它都是未初始化的(即“AsProperty”包含默认值)。
那有什么不对?
答案 0 :(得分:0)
1)你的A DP怎么样是double 和类的?
2)你很可能想避免这样做:
new FrameworkPropertyMetadata(new AClass())
因为您在那里新建的确切AClass实例将被共享 所有UserControl实例都默认为。
3)你必须让你的MainWindow实现INotifyPropertyChanged(更喜欢制作 一个MainWindowViewModel)并在你的setter中有你的属性RaisePropertyChanged。