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>
我发现了我的错误!
在编辑器的容器中,我在SelectedEntity上设置了一个带有datatrigger的样式。
如果我删除此样式,效果很好!:)
感谢cscmh99!