DataGridTemplateColumn DataTemplate에서 두 개의 컨트롤을 "[name] : [value]"형식의 문자열 필드에 바인딩하려고합니다. 즉 문자열은 콜론 ":"으로 구분됩니다. 컨트롤을 a) [name] 부분에 바인딩하고 b) 값 부분을 제어해야합니다.2 개의 컨트롤을 1 개의 필드에 바인딩하고 ConvertBack의 2 개의 컨트롤 값에 액세스하는 방법은 무엇입니까?
나는 성공적 표시 문자열 분할하는 IValueConverter를 사용 할 수있게되었습니다 :
public class NameAndValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string rtn = "";
string[] split = value.ToString().Split(':');
if (split.Count() == 2)
{
if(parameter.ToString() == "Name")
rtn = split[0];
if(parameter.ToString() == "Value")
rtn = split[1];
}
return rtn;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new InvalidOperationException("NameAndValueConverter can only be used OneWay.");
}
}
그리고 XAML :
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<StackPanel.Resources>
<local:NameAndValueConverter x:Key="NameAndValueConverter" />
</StackPanel.Resources>
<TextBox x:Name="namePart" Text="{Binding Path=FieldType, Converter={StaticResource NameAndValueConverter}, ConverterParameter='Name'}" />
<TextBox x:Name="valuePart" Text="{Binding Path=FieldType, Converter={StaticResource NameAndValueConverter}, ConverterParameter='Value'}" />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
을하지만 데이터는 그래서 어떻게 텍스트 상자에 있습니다 편집 할 수 있습니다 ConvertBack에서 2 TextBox 값에 액세스하여 다시 조인 할 수 있습니까?
당신은에 액세스 할 수 있습니까 (당신은 분명히
INotifyPropertyChanged
를 구현해야 것) 자동으로 업데이트됩니다 당신이 바인딩하는 뷰 모델? 당신은 그 viewmodel에 2 개의 새로운 속성을 소개 할 수 있습니까? – Andy