2つのデータグリッド列の間で検証依存関係を作成しようとしています。列間にデータグリッドの検証依存関係を作成するにはどうすればいいですか
最初の列はドロップダウンボックスです。 (DataGridTemplateColumn) 2番目はテキスト列です。 (DataGridTextColumn)
同じ行のDataGridテキスト列セルの検証を強制するために、コードのドロップダウンボックスイベントから試しています。
ありがとうございました。ここで
<data:DataGridTemplateColumn Header="Type" >
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Source={StaticResource TypeListContainer}, Path=TypeLists}" Loaded="TypeBoxLoaded" DropDownClosed="TypeBoxChanged">
</ComboBox>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
<data:DataGridTextColumn Header="Rule" Binding="{Binding RuleWrapper, ValidatesOnDataErrors=True, NotifyOnValidationError=True}" x:Name="RuleCol" />
プロパティ
public string RuleWrapper
{
get
{
return this.Rule;
}
set
{
//Required
if (value == null || value == string.Empty)
{
throw new ValidationException("Rule is required");
}
//Match regular expression if type is channel
Regex reg = new Regex(@"^(51[01]|50[0-9]|[0-4]?[0-9][0-9]?)\.(51[01]|50[0-9]|[0-4]?[0-9][0-9]?)\.(51[01]|50[0-9]|[0-4]?[0-9][0-9]?)\.(51[01]|50[0-9]|[0-4]?[0-9][0-9]?)$");
if (Type == "channel" && !reg.IsMatch(value))
throw new ValidationException("Channel not matching the right format");
//Match range if type is trunk
int intValue = -1;
//Match if is a number
if (int.TryParse(value, out intValue))
{
//Match if number is in the range
if (intValue < 0 || intValue > 134217727)
throw new ValidationException("Trunk value must be between 0 and 134317727");
}
else
throw new ValidationException("Trunk value must a an integer");
this.Rule = value;
}
}
ComboBoxコントロールの目的は何ですか?選択した値も有効にする必要がありますか?あなたの例では、 'RuleWrapper = RuleWrapper'を呼び出すことによって検証を強制することができますが、それがあなたが必要とするものであるとは確信していません。 – vorrtex
comboxボックスを選択すると、ルールに対して異なる検証がトリガーされます。だから私はRuleWrapper = RuleWrapperを実行してコード内の検証を強制すると、ValidationExceptionがスローされますが、データグリッド上で正しく表示されるように扱う方法がわかりません – Stainedart
IDataErrorInfoを使用すると、 INotifyDataErrorInfoインターフェイス。これらのインターフェイスで実行されるようにこの検証を完全に書き直すとどう思いますか?その後、すべての検証コードを書き直す必要があります。 – vorrtex