ツールキットから DataForm を操作してきましたが、明らかに IEditableObject インターフェイスに問題があることに気付きました。データフォームは、2 つのサブオブジェクトを持つオブジェクトにバインドされています。親オブジェクトと 2 つのサブオブジェクトのすべてのフィールドが同じフォームにあります。親オブジェクトからデータフィールドを変更すると、「OK」ボタンが有効になりますが、サブオブジェクトの 3 つのフィールドのうち 2 つを操作すると、「OK」ボタンは無効のままになります。フィールド間の違いを調査しようとしましたが、それらはすべて同じように見えますが、誰かが同じ問題に直面していますか?
以下のサンプルでは、フィールド NumberWrapper と LabelWrapper は親オブジェクトに属し、Stc1Wrapper は親オブジェクトの一部であるオブジェクトです。フィールド ラベルは OK ボタンをトリガーしますが、電話番号と転送コード フィールドはトリガーしません。Stc1Wrapper の 3 つのフィールドの基本的な実装はすべて同じように見えます。残念なことに、このデータフォーム コントロールはツールキットに由来するため、適切な MSDN ドキュメントが見つかりません。
<toolkit:DataForm Grid.Column="1"
Margin="0,94,0,0"
Width="350"
Name="EsnDataForm"
Header="Esn Item"
AutoGenerateFields="False"
CurrentItem="{Binding ElementName=MyGrid, Path=SelectedItem,Mode=TwoWay}"
AutoEdit="False"
AutoCommit="False"
CommandButtonsVisibility="Cancel,Edit,Commit"
CommitButtonContent="Save"
CancelButtonContent="Cancel">
<toolkit:DataForm.NewItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="32" />
<RowDefinition Height="32" />
<RowDefinition Height="32" />
<RowDefinition Height="32" />
</Grid.RowDefinitions>
<toolkit:DataField Label="Number" IsReadOnly="True" >
<TextBox Text="{Binding NumberWrapper,Mode=TwoWay}" MaxLength="9" Width="120" IsReadOnly="True" />
</toolkit:DataField>
<toolkit:DataField Label="Label" Grid.Row="1" >
<TextBox Name="NameBox" Text="{Binding LabelWrapper,Mode=TwoWay}" MaxLength="32" Width="120" />
</toolkit:DataField>
<toolkit:DataField Label="Sub Label" Grid.Row="2" >
<TextBox Name="SubLabelBox" Text="{Binding PrimaryPsapLabelWrapper,Mode=TwoWay}" MaxLength="32" Width="120" />
</toolkit:DataField><toolkit:DataField Label="Label" Margin="-50,1,1,1" >
<TextBox Name="Stc1LabelBox" Text="{Binding Stc1Wrapper.LabelWrapper, Mode=TwoWay}" MaxLength="32" Width="120" />
</toolkit:DataField>
<toolkit:DataField Label="Telephone Number" Margin="-50,1,1,1" >
<TextBox Name="Stc1TelephoneBox" Text="{Binding Stc1Wrapper.TnWrapper, Mode=TwoWay}" MaxLength="10" Width="120" />
</toolkit:DataField>
<toolkit:DataField Label="Transfer Code" Margin="-50,1,1,1" >
<TextBox Name="Stc1TransferCodeBox" Text="{Binding Stc1Wrapper.TransferCodeWrapper, Mode=TwoWay}" Width="120" />
</toolkit:DataField>
[...]
/// <remarks/>
[System.Xml.Serialization.XmlIgnore]
public string TransferCodeWrapper
{
get
{
return this.TransferCode;
}
set
{
ValidateRequired("TransferCodeWrapper", value, "Transfer Code is mandatory");
ValidateRegularExpression("TransferCodeWrapper", value, @"^[\*]\d{1,3}$", "The format should be * followed by 1 to 3 digits");
this.TransferCode = value;
this.RaisePropertyChanged("TransferCodeWrapper");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlIgnore]
public string TnWrapper
{
get
{
return this.Tn;
}
set
{
ValidateRequired("TnWrapper", value, "Telephone number is mandatory when Type is Telephone Number");
ValidateRegularExpression("TnWrapper", value, @"^\d{10}$", "The telephone number should be 10 digits");
this.Tn = value;
this.RaisePropertyChanged("TnWrapper");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlIgnore]
public string LabelWrapper
{
get
{
return this.Label;
}
set
{
ValidateRequired("LabelWrapper", value, "Label is required");
ValidateRegularExpression("LabelWrapper", value, @"^[\w-_ ]$+", "Characters allowed (a-z,A-Z,0-9,-,_, )");
this.Label = value;
this.RaisePropertyChanged("LabelWrapper");
}
}