Wpf 4 Проблема привязки столбцов DataGrid - PullRequest
0 голосов
/ 10 сентября 2010

Я создал сетку данных со столбцами, привязанными к наблюдаемой коллекции.Все работает хорошо, за исключением столбца, который привязан к нулевому десятичному свойству из моего бизнес-объекта.

Если я использую

<DataGridTextColumn Binding="{Binding Path=BaseUnitCostValue}" Header="Unit Cost Value" MinWidth="100" />

в качестве определения моего столбца, все работает хорошо, однако, поскольку яв конечном итоге захочу, чтобы это был сложный столбец, который я пытался использовать с помощью DatagridTemplateColumn, чтобы

<DataGridTemplateColumn Header="Unit Cost Value" MinWidth="100">
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <TextBox Text="{Binding BaseUnitCostValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding BaseUnitCostValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" TextAlignment="Right"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

Однако, используя эту конфигурацию столбца, хотя я могу ввести значение, как только я закончу редактирование в ячейкуего значение исчезает.

Я также пытался использовать конвертеры для преобразования в строку и обратно в дробное десятичное число, но безуспешно.

Я сильно подозреваю, что это связано сДело в том, что это связано с обнуляемым десятичным числом.Есть ли что-то еще, что мне нужно сделать с моими шаблонами cellTemplates, чтобы значение связывалось правильно, точно так же, как и при использовании стандартного DataGridTextColumn?

Спасибо

Ответы [ 2 ]

1 голос
/ 10 сентября 2010

Может быть, это потому, что вы пытаетесь создать двустороннюю привязку для TextBlock в шаблоне без правки:

 <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
            <TextBlock Text="{Binding BaseUnitCostValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" TextAlignment="Right"/> 
        </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 

Попробуйте изменить его на одностороннюю, может тогда это сработает.Удалите также оператор Trigger.

Если это не помогает, посмотрите в окне вывода, если вы видите соответствующее сообщение.

0 голосов
/ 10 сентября 2010

Это была проблема в моей бизнес-модели.

Мне пришлось изменить свою собственность с

 Public Property BaseUnitCostValue As Decimal?
        Get
            Return _BaseUnitCostValue
        End Get
        Set(ByVal value As Decimal?)
            If _BaseUnitCostValue <> value Then
                _BaseUnitCostValue = value
                Me.DataStateChanged("BaseUnitCostValue")
                Me.DataStateChanged("TotalBaseUnitCostValue")
            End If

        End Set
    End Property

На

 Public Property BaseUnitCostValue As Decimal?
        Get
            Return _BaseUnitCostValue
        End Get
        Set(ByVal value As Decimal?)
            If (Not _BaseUnitCostValue.HasValue) OrElse (Not value.HasValue) OrElse _BaseUnitCostValue <> value Then
                _BaseUnitCostValue = value
                Me.DataStateChanged("BaseUnitCostValue")
                Me.DataStateChanged("TotalBaseUnitCostValue")
            End If

        End Set
    End Property

И проблема ушла.Благодаря HCL идея точки останова в простом конвертере показала мне, что свойство никогда не обновлялось.

...