グリッド内でユーザーコントロールを使用しています。このユーザーコントロールには、ビューモデルによって提供されるオブジェクトのプロパティにバインドされたテキストボックスが含まれています。私の問題は、プロパティが文字列または整数になる可能性があることです。
依存関係プロパティを文字列に設定したので、表示には問題ありませんが、ユーザーが int フィールドに文字列を入力すると、ビュー モデルによって検証エラーはスローされませんが、もちろんデータベースに保存できません。
ユーザーコントロール XAML
<UserControl x:Class="GenericFileTransferClient.Views.UserControlTextBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid Name="GridLayout">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="7*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Path=LabelText}" VerticalAlignment="Center" Style="{StaticResource ResourceKey=TextBlockWrapping}" />
<DockPanel Grid.Column="1">
<Border DockPanel.Dock="Right"
ToolTip="" Style="{StaticResource BorderReportDetail}">
<TextBlock Text="?" Style="{StaticResource TextBoxReportDetail}"></TextBlock>
</Border>
<TextBox Text="{Binding Path=TextBoxText}"/>
</DockPanel>
</Grid>
</UserControl>
ユーザーコントロールのコードビハインド
public partial class UserControlTextBox : UserControl
{
public static DependencyProperty LabelTextProperty = DependencyProperty.Register("LabelText", typeof(String), typeof(UserControl));
public static DependencyProperty TextBoxTextProperty = DependencyProperty.Register("TextBoxText", typeof(String), typeof(UserControl));
public String LabelText
{
get { return (String)GetValue(LabelTextProperty); }
set { SetValue(LabelTextProperty, value); }
}
public String TextBoxText
{
get { return (String)GetValue(TextBoxTextProperty); }
set { SetValue(TextBoxTextProperty, value); }
}
public UserControlTextBox()
{
InitializeComponent();
GridLayout.DataContext = this;
}
}
メイン グリッドでのユーザー コントロールの呼び出しの例
<views:UserControlTextBox LabelText="Report Name:" TextBoxText="{Binding Path=CurrentReport.ReportName}" Grid.Row="1" Grid.ColumnSpan="2"/>
<TextBlock Text="Header:" Grid.Row="2"/>
<CheckBox Grid.Column="1" Grid.Row="2" IsChecked="{Binding Path=CurrentReport.Header}"
VerticalContentAlignment="Stretch" VerticalAlignment="Center" Name="HeaderCheckBox"/>
<Grid Grid.Row="3" Grid.ColumnSpan="2" Visibility="{Binding IsChecked, ElementName=HeaderCheckBox, Converter={StaticResource BoolToVisConverter}}">
<views:UserControlTextBox LabelText="# Row Header:" TextBoxText="{Binding Path=CurrentReport.HeaderRow}"/>
</Grid>
ご覧のとおり、CurrentReport.ReportName は文字列ですが、CurrentReport.HeaderRow は int です。
依存関係プロパティをジェネリックにする方法、またはユーザー コントロールに渡されるパラメーターに基づく方法はありますか。または、ユーザーが保存ボタンをクリックする前に検証を開始する方法はありますか?
ありがとうございました