私は 5 つの列 (1 つのヘッダー (読み取り専用)、3 つのテキスト ボックス、1 つのコンボ ボックス) をDataGrid
持つを持っています。UserConrtol
へのDataGrid
バインドがありObservableCollection
ます。私が直面する唯一の問題は次のとおりです。行ののみを変更すると、「ユニット」のプロパティバインドがComboBox
更新されません。ComboBox
他の col & of の値も変更すると、ComboBox
更新されます。しかし、リストからアイテム
のみを変更してグリッド/行から出た場合、プロパティは更新されません。さまざまな方法を試しましたが、上記の原因を見つけることができませんでした。コードは次のとおりです。ComboBox
ComboBox
<DataGrid AutoGenerateColumns="False" Height="133" Name="dgvData" Width="550" BorderBrush="#FFB7B39D"
Background="LightYellow" RowBackground="LightGray" AlternatingRowBackground="#FFFFFFF5" BorderThickness="10"
CanUserReorderColumns="False" CanUserSortColumns="False" CanUserDeleteRows="False"
FontSize="13" CanUserAddRows="False" ItemsSource="{Binding Step3ModelList, Mode=TwoWay}">
<DataGrid.Columns>
<DataGridTextColumn Header="" Binding="{Binding SqueezeHeader, ValidatesOnExceptions=True}" MinWidth="110" IsReadOnly="True"/>
<DataGridTextColumn Header="Preflush" Binding="{Binding Preflush, ValidatesOnExceptions=True}" MinWidth="110"/>
<DataGridTextColumn Header="Main Injection" Binding="{Binding MainInjection, ValidatesOnExceptions=True}" MinWidth="110"/>
<DataGridTextColumn Header="Overflush" Binding="{Binding Overflush, ValidatesOnExceptions=True}" MinWidth="110"/>
<DataGridTemplateColumn x:Name="reasonColumn" Header="Unit" Width="Auto" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<!-- ComboBox ItemsSource="{Binding Path=DataContext.UnitItems, RelativeSource={RelativeSource AncestorType=UserControl}}" SelectedValue="{Binding Unit, Mode=TwoWay}" Text="Unit" / -->
<ComboBox ItemsSource="{Binding Path=DataContext.UnitItems, RelativeSource={RelativeSource AncestorType=UserControl}}" SelectedValue="{Binding Unit, ValidatesOnExceptions=True}" >
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<DataGrid.RowValidationRules>
<validator:SqueezeEntryValidation ValidationStep="UpdatedValue" />
</DataGrid.RowValidationRules>
<DataGrid.RowValidationErrorTemplate>
<ControlTemplate>
<Grid Margin="0,-2,0,-2" ToolTip="{Binding RelativeSource={RelativeSource
FindAncestor, AncestorType={x:Type DataGridRow}},
Path=(Validation.Errors)[0].ErrorContent}">
<Ellipse StrokeThickness="0" Fill="Red" Width="{TemplateBinding FontSize}" Height="{TemplateBinding FontSize}" />
<TextBlock Text="!" FontSize="{TemplateBinding FontSize}" FontWeight="Bold" Foreground="White" HorizontalAlignment="Center" />
</Grid>
</ControlTemplate>
</DataGrid.RowValidationErrorTemplate>
</DataGrid>
実装するオブジェクトの Unit プロパティINotifyPropertyChanged
public string Unit
{
get { return unit; }
set
{
if (unit != value)
{
unit = value;
Changed("Unit");
}
}
}
検証規則
public class SqueezeEntryValidation : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
Step3Model model = (value as BindingGroup).Items[0] as Step3Model;
if (model.SqueezeHeader == null || model.SqueezeHeader == string.Empty)
return new ValidationResult(false, "Squeeze Header can not be empty");
if (model.Preflush < 0)
return new ValidationResult(false, "Preflush can not be negative");
if (model.Overflush < 0)
return new ValidationResult(false, "Overflush can not be negative");
if (model.MainInjection < 0)
return new ValidationResult(false, "MainInjection can not be negative");
return ValidationResult.ValidResult;
}
}
私も呼び出しValidate
てみComboBox
たので、結果は更新されますが、値が変更さValidate
れたときに呼び出されることはありません。ComboBox
Unit プロパティComboBox
が常に更新されていることを確認するにはどうすればよいTextBox
ですか-更新されているかどうかにかかわらず。Tab
ユーザーが何らかの方法でクリックしたり、フォーカスを失ったりした場合、値が変更された場合は更新する必要があります。
誰でもこれで私を助けてくれませんか。何が欠けているか、間違っていますか?