WPF C#数据绑定错误可见性

本文关键字:可见性 错误 数据绑定 WPF | 更新日期: 2023-09-27 18:25:22

我是个绝望的人。。。这是我的问题。我有一个容器,其中包含usercontrol(我的参考编辑器)。

我的容器的内容由属性"Editor"绑定,该属性根据所选对象的类型返回正确的用户控件。

这是我的集装箱代码:

<Border BorderThickness="1" BorderBrush="LightGray" Grid.Row="1">
    <UserControl Content="{Binding Editor, Mode=OneWay}"/>
</Border>

这是我选择的对象属性:

public object SelectedEntity
{
    get { return _SelectedEntity; }
    set
    {
        Set("SelectedEntity", ref _SelectedEntity, value);
        Editor = (value != null) ? Editors[value.GetType()] : null;
        if (Editor != null)
        {
             Editor.SetEditable(true);
             Editor.SetValue(SelectedEntity);
        }
    }
}

选择对象时,将找到并应用正确的编辑器。但是在视图中,编辑器的内部控件是不可见的(Label、Textbox和button)。

在输出中,我发现了这个异常:

System.Windows.Data错误:40:BindingExpression路径错误:在"object"GomageEditor"(名称=")上找不到"SelectedEntity"属性。BindingExpression:Path=SelectedEntity;DataItem='GomageEditor'(名称='');目标元素为"Grid"(名称=");目标属性为"NoTarget"(类型为"Object")

我不知道这个异常,但当我在usercontrol编辑器的构造函数中注释datacontext声明时,它是可见的。。。

/// <summary>
///     Constructeur par défaut
/// </summary>
public UserControlEditor()
{
    InitializeComponent();
    /* When i comment this line innercontrols of usercontrol are visible */
    DataContext = new UserControlEditorViewModel();
}

有个主意吗?解决方案提前感谢。。。

我使用Galasoft MVVM ligth作为MVVM模式,使用Mahapps模板作为控件。

编辑:当我处于非编辑模式时,我在用户控件上使用一个触发器来覆盖Textbox样式。

<UserControl.Resources>
    <Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Editing}" Value="False">
                <Setter Property="Background" Value="Transparent"/>
                <Setter Property="BorderBrush" Value="Transparent"/>
                <Setter Property="Foreground" Value="DarkGray"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Label Content="Type de gommage" Style="{StaticResource Title5}" />
    <TextBox Grid.Column="1" Text="{Binding Gommage.Type}"/>
    <Label Content="Acronyme du gommage" Style="{StaticResource Title5}" Grid.Row="1"/>
    <TextBox Grid.Column="1" Grid.Row="1" Text="{Binding Gommage.Acronyme}"/>
    <Button Grid.Row="2" Grid.ColumnSpan="2" 
            HorizontalAlignment="Center" 
            Command="{Binding SaveCommand}"
            Content="Enregistrer"
            IsEnabled="{Binding Editing}"/>
</Grid>

WPF C#数据绑定错误可见性

我发现了我的错误!

在编辑器的容器中,我在SelectedEntity上设置了一个带有datatrigger的样式。

如果我删除此样式,效果很好!:)

感谢cscmh99!