我要解决的问题:在EditForm
内部使用一些DevExpress Blazor组件时,我遇到了一个问题,它们不工作。我认为这是因为EditForm
提供了一个EditContext
作为级联值,当它存在时,Dx控件需要设置ValueExpression
或CheckedExpression
等。一个例子是尝试为EditForm
:
中的网格启用列选择器。https://demos.devexpress.com/blazor/Grid/Columns ColumnChooser
当我尝试打开列选择器时,我得到这个错误:
系统。InvalidOperationException: DevExpress.Blazor.DxCheckBox需要一个' checkedexexpression '属性的值。
下面是一个简单的例子:
<EditForm Model="data">
<input type="number" @bind-value="data.Id" />
<DxCheckBox
T="bool"
Checked="unrelatedValue"
CheckedChanged="b => unrelatedValue = b">
</DxCheckBox>
</EditForm>
@code {
private DataObject data = new DataObject();
private bool unrelatedValue;
public class DataObject
{
public int? Id { get; set; }
}
}
如果将DxCheckBox
移到EditForm
之外,则不会发生错误。
是否有任何方法可以阻止CascadingValue或以其他方式从EditContext
中排除组件,以便它不需要设置Expression
属性?
根据文档,如果你不使用双向绑定,那么你需要提供ValueExpression
考虑到您为Checked和CheckedChanged设置的值可以用于双向绑定,那么我将使用它:
@bind-Checked=@unrelatedValue
否则,添加ValueExpression:
ValueExpression=@(() => unrelatedValue)