2011-03-24 3 views
0

저는 WPF를 처음 사용합니다. 내 응용 프로그램에서 다른 열 및 TextBox를 기반으로 datagrid 열을 calcualte 위해 노력하고있어. 그것은 두 개를 곱해야하고 결과를 주어야합니다. 같은 경우 IMultiValueConverter를 사용하고 있습니다. DataGrid에 다음과 같이 바인딩이 있습니다.Convert 함수에는 항상 하나의 값이 있습니다. DependencyProperty.UnsetValue - WPF

<DataGrid.Columns> 

       <DataGridTemplateColumn Header="TranD"> 

        <DataGridTemplateColumn.CellTemplate > 
         <DataTemplate> 
          <TextBox Text="{Binding Path=TranD, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, TargetNullValue=0}" Name="dgtbTranD" 
               /> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
        <DataGridTemplateColumn.CellEditingTemplate> 
         <DataTemplate> 
          <TextBox Text="{Binding Path=TranD, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, TargetNullValue=0}"/> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellEditingTemplate> 
       </DataGridTemplateColumn> 
       <DataGridTemplateColumn Header="Tran Credit" Width="*"> 
        <DataGridTemplateColumn.CellTemplate > 
         <DataTemplate> 
          <TextBox Text="{Binding Path=TranC, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, TargetNullValue=0}" Name="dgctbTranC" 
                /> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
        <DataGridTemplateColumn.CellEditingTemplate> 
         <DataTemplate> 
          <TextBox Text="{Binding Path=TranC, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, TargetNullValue=0}" /> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellEditingTemplate> 
       </DataGridTemplateColumn> 
       <DataGridTemplateColumn Header="Func Debit" Width="*"> 
        <DataGridTemplateColumn.CellTemplate > 
         <DataTemplate> 
          <TextBlock Name="dgtbFuncD" IsEnabled="False" > 
           <TextBlock.Text> 
            <MultiBinding Converter="{StaticResource Multiplication}"> 
              <Binding Path="TranD" TargetNullValue="0" /> 
              <Binding ElementName="txtExchRate" Path="Text"/> 
            </MultiBinding> 
           </TextBlock.Text> 
          </TextBlock> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 

       </DataGridTemplateColumn> 
       <DataGridTemplateColumn Header="Func Credit" Width="*"> 
        <DataGridTemplateColumn.CellTemplate > 
         <DataTemplate> 
          <TextBlock Name="dgctbFuncC" IsEnabled="False"> 
            <TextBlock.Text> 
            <MultiBinding Converter="{StaticResource Multiplication}"> 
              <Binding Path="TranC" />    

              <Binding ElementName="txtExchRate" Path="Text" /> 
            </MultiBinding> 
           </TextBlock.Text> 
          </TextBlock> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 

       </DataGridTemplateColumn> 
      </DataGrid.Columns> 

문제는 제 요소 바인딩입니다. 요소 이름은 절대적으로 정확하지만 구현 된 클래스에서는 항상 DependencyProperty.UnsetValue 값을 사용합니다. 문제가 무엇입니까 ??? 어떤 생각. 다음과 같이

컨버터 기능은 다음과 같습니다

public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) { 
      try 
      { 
       if (values[0] == null || values[1] == null) 
       { 
        return 0; 
       } 
       else 
       { 
        return (System.Convert.ToInt32(values[0]) + System.Convert.ToInt32(values[1])).ToString(); 
       } 
      } 
      catch (Exception ex) 
      { 
       return 0; 
      } 

} 

답변

0

ElementName 바인딩 소스는 현재 이름 범위에서 소스 요소를 검색합니다. 이것은 다른 언어 (예 : C# 또는 VB)의 범위와 유사합니다. 범위는 일반적으로 각 고유 한 XAML 파일 (Window/UserControl)로 정의되지만 템플릿 (ControlTemplatesDataTemplates)은 자체 범위가 있습니다. ContextMenu과 같이 자신의 이름 범위를 정의하는 다른 컨트롤이 있습니다.

당신이 말하는 텍스트 상자가 다른 이름 범위에있는 것처럼 보입니다.

+0

특정 구성에 대한 정보를 더 게시하면 대안을 제안 할 수 있습니다. 이름 범위는 작업하기가 까다로울 수 있습니다. –

+0

예를 들어 TextBox가 다른 XAML 파일에 있습니까? 이 TextBox는 응용 프로그램/XAML에 있습니까? –

+0

텍스트 상자는 Grid 외부의 동일한 XAML 파일에 있습니다. – Jankhana

관련 문제