Я пытаюсь создать UserControl, который по сути является текстовым полем адреса IPv4.
В UserControl есть 4 текстовых поля, причем текстовый блок содержит один символ "." между каждым TextBox:
<Grid Grid.IsSharedSizeScope="True">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="GroupA" />
<ColumnDefinition Width="*" />
<ColumnDefinition SharedSizeGroup="GroupA" />
<ColumnDefinition Width="*" />
<ColumnDefinition SharedSizeGroup="GroupA" />
<ColumnDefinition Width="*" />
<ColumnDefinition SharedSizeGroup="GroupA" />
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" TabIndex="0" x:Name="TextOctet1" />
<TextBlock Grid.Column="1" Text="." />
<TextBox Grid.Column="2" TabIndex="1" x:Name="TextOctet2" />
<TextBlock Grid.Column="3" Text="." />
<TextBox Grid.Column="4" TabIndex="2" x:Name="TextOctet3" />
<TextBlock Grid.Column="5" Text="." />
<TextBox Grid.Column="6" TabIndex="3" x:Name="TextOctet4" />
</Grid>
Я надеюсь, что у меня может быть DependencyProperty с именем IPAddress для элемента управления, к которому я могу привязаться, или для установки значения по умолчанию в XAML "123.123.123.123".
<local:IPBox IPAddress="123.123.123.123" />
Я думал, что мог бы использовать что-то вроде MultiBinding и IMultiValueConverter:
public class IPAddressConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return String.Format("{0}.{1}.{2}.{3}", values[0], values[1], values[2], values[3]);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
return ((string)value).Split('.');
}
}
Но я считаю, что это будет противоположно тому, что я хочу. MultiValueConverter объединит несколько свойств бизнес-логики в одно свойство для привязки TextBox.
Вместо этого я хочу связать одно свойство бизнес-логики (строку, представляющую адрес IPv4) и сделать так, чтобы каждый октет отображался в своем собственном TextBox. Затем, если какой-либо из октетов TextBoxes изменится, свойство зависимостей IPAddress будет обновлено.
Возможно ли это? Правильно ли я думаю об этой проблеме?