转换函数始终具有一个值DependencyProperty.UnsetValue - WPF

时间:2011-03-24 12:34:09

标签: wpf datagrid binding element imultivalueconverter

我是WPF的新手。在我的应用程序中,我试图根据另一列和TextBox计算datagrid列。它应该乘以两者并给出结果。对于同样的我使用IMultiValueConverter。我在DataGrid中的Bindings如下:

<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;
            }   

 }

1 个答案:

答案 0 :(得分:0)

ElementName绑定源搜索当前NAME SCOPE中的source元素。这类似于其他语言的范围(如C#或VB)。范围通常使用每个唯一的XAML文件(Window / UserControl)定义,但模板(ControlTemplatesDataTemplates)具有自己的范围。还有其他控件也定义了自己的名称范围,例如ContextMenu

您所指的文本框看起来与名称范围不同。

相关问题