好吧,我想我在这里失去了一些东西。是不是Xaml打破我的封装?
可以说,在Winforms应用程序中我有一个Form和一个UserControl。然后,我将一个按钮添加到UserCntrol,然后将UserControl添加到窗体。现在Button被添加到UserControl中作为私人成员,直到UserControl通过公共属性公开它的私人成员,Form就不应该访问Button。
private void Form1_Load(object sender, EventArgs e)
{
this.testUserControl1.
}
您将无法从表单的代码中找到UserControl的按钮。从封装的角度来看,我认为这正是我们想要的。
现在让我们说,我在WPF应用程序中使用Window和UserControl做同样的事情。我通过Xaml向UserControl添加一个Button,然后将UserControl添加到窗口。但是现在我可以从Window的代码访问Button。
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.testUserControl1.button1.Content = "What the HELL!";
}
如果我通过代码,而不是XAML中添加一个按钮,我还要把它变成私有的机会。但“通过代码声明构建用户界面,不是” - 这不就是Xaml在那里的原因吗?那么是不是打破了封装的概念?
编辑:我知道我们大多数人,包括我自己,用MVVM来开发WPF应用程序,你不需要从你的代码隐藏是指你的UI元素。但问题的背景仍然存在,对吗?我经常构建可重用的UserContolr(而不是像MVVM中的View),将它们用作视觉元素,其中我通常不需要使用UserControl的代码隐藏。
从来没有注意到这一点,然后再次,我几乎从来没有命名我的控件,我几乎从来没有在Windows或用户控件后面的代码。 –
@ H.B .:请看编辑 – atiyar