0

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 값에 액세스하여 다시 조인 할 수 있습니까?

+0

당신은에 액세스 할 수 있습니까 (당신은 분명히 INotifyPropertyChanged를 구현해야 것) 자동으로 업데이트됩니다 당신이 바인딩하는 뷰 모델? 당신은 그 viewmodel에 2 개의 새로운 속성을 소개 할 수 있습니까? – Andy

답변

1

XAML에 이렇게 :

<DataGridTemplateColumn.CellEditingTemplate> 
    <DataTemplate> 
     <StackPanel Orientation="Horizontal"> 
      <StackPanel.Resources> 
       <local:NameAndValueConverter x:Key="NameAndValueConverter" /> 
      </StackPanel.Resources> 
      <TextBox x:Name="namePart" Text="{Binding Path=FieldType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource NameAndValueConverter}, ConverterParameter='Name'}" /> 
      <TextBox x:Name="valuePart" Text="{Binding Path=FieldType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource NameAndValueConverter}, ConverterParameter='Value'}" /> 
     </StackPanel> 
    </DataTemplate> 
</DataGridTemplateColumn.CellEditingTemplate> 

이 충분해야한다. 당신은 UI에서 편집 할 TwoWay 바인딩을해야하고, 당신이 PropertyChangedUpdateSourceTrigger을 설정할 때 속성은 뷰 모델에 수정 될 때 TextBox

관련 문제