Я пытаюсь создать UserControl, который по сути является «текстовым полем» адреса IPv4.
В UserControl есть 4 текстовых поля, а TextBlock содержит один "." между каждым текстовым полем:
<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) и чтобы каждый октет отображался в своем собственном текстовом поле. Затем, если какое-либо из текстовых полей Octet изменится, свойство зависимости IPAddress будет обновлено.
Это возможно? Правильно ли я думаю об этой проблеме?