我对C#很陌生,所以我才开始学习基础知识。现在我在窗口中有ContentControl
,如下所示:
<ContentControl Content="{Binding}" x:Name="SubView"/>
我按照以下方式配置了Windows的资源:
<Window.Resources>
<DataTemplate x:Name="StammdatenViewTemplate" DataType="{x:Type viewmodels:StammdatenViewModel}">
<views:StammdatenView DataContext="{Binding}" />
</DataTemplate>
<DataTemplate x:Name="AdministrationViewTemplate" DataType="{x:Type viewmodels:AdministrationViewModel}">
<views:AdministrationView DataContext="{Binding}" />
</DataTemplate>
</Window.Resources>
在我的Window类中,我正在设置DataContext
,如下所示:
DataContext = new StammdatenViewModel();
这是我想做的事情。我想禁用TextBoxes
内的所有ContentControl
。我考虑过向我的StammdatenView.xaml.cs
类添加一个函数(这是我的子视图的类),然后以某种方式从Window中触发事件。虽然我需要访问子视图中的功能。这是不可能的,如果是的话怎么样?或者有人会建议采用不同的方法吗?
提前致谢。
答案 0 :(得分:3)
或者有人会建议采用不同的方法吗?
是。您应该将IsEnabled
中每个TextBox
的{{1}}属性绑定到StammdatenView
的布尔属性。
然后,您可以通过在视图模型类中设置source属性来禁用StammdatenViewModel
。这是MVVM设计模式的关键方面之一,即您在视图模型中处理应用程序逻辑。
确保视图模型类实现TextBoxes
接口并按照MSDN中的说明提供更改通知。
答案 1 :(得分:0)
您可以在视图模型上创建一个INotifyPropertyChanged事件,然后将其绑定到&#39; IsEnabled = {Binding IsTextBoxEnabled}&#39;文本框的视图模板中的属性。
public class ViewModel : BaseViewModel
{
private bool _isTextBoxEnabled;
public bool IsTextBoxEnabled
{
get { return _isTextBoxEnabled; }
set
{
if (value != _isTextBoxEnabled)
_isTextBoxEnabled = value;
this.RaisePropertyChanged("IsTextBoxEnabled");
}
}
}
XAML
<DataTemplate x:Key="template">
<StackPanel Orientation="Horizontal" DataContext="{Binding}">
<TextBox IsEnabled="{Binding IsTextBoxEnabled}" />
</StackPanel>
</DataTemplate>