ContentControl视图

时间:2018-06-04 14:45:50

标签: c# wpf

我对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中触发事件。虽然我需要访问子视图中的功能。这是不可能的,如果是的话怎么样?或者有人会建议采用不同的方法吗?

提前致谢。

2 个答案:

答案 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>