Поле со списком WPF DataGridTemplateColumn обновляет все строки

У меня есть этот XAML, который выбирает значение из поля со списком, в котором ItemSource является Enum. Я использовал учебник:

http://www.c-sharpcorner.com/uploadfile/dpatra/combobox-in-datagrid-in-wpf/

            <DataGrid x:Name="dgProductItem" 
                   ItemsSource="{Binding ProductVersion.ProductItems}"

            <DataGridTemplateColumn Header="Deployment Type" Width="120">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding DeploymentType}"></TextBlock>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <ComboBox ItemsSource="{Binding Source={StaticResource DeploymentTypeEnum}}"
                                  SelectedItem="{Binding DeploymentType}">

                        </ComboBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>

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

Редактировать:

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

Ваше здоровье


person user3428422    schedule 25.04.2014    source источник
comment
-1 За дублирование вопросов... еще хуже, что вы дублируете свой собственный вопрос. Сколько вопросов вы хотите задать по одной и той же проблеме? На этом сайте мы предпочитаем, чтобы пользователи редактировали свои вопросы, чтобы предоставить больше информации, а не задавали один и тот же вопрос повторно.   -  person Sheridan    schedule 25.04.2014
comment
Однако ответ на этот вопрос заключается в том, что ваш DeploymentType почти наверняка является единственным, но вы используете его для каждой строки в DataGrid. Ваше свойство enum должно относиться к классу, к которому принадлежит каждый элемент в DataGrid.   -  person Sheridan    schedule 25.04.2014
comment
Я согласен, это тот же вопрос, но его код совершенно другой, и редактирование предыдущего вопроса было бы бессмысленным, так как он будет слишком далеко в списке. Так что это была бы пустая трата времени   -  person user3428422    schedule 25.04.2014
comment
Спасибо, но свойство enum находится в моей модели класса ProductVersion.ProductItems.   -  person user3428422    schedule 25.04.2014
comment
Это не совершенно другой код... так я понял, что это тот же вопрос... потому что код очень похож. И правки обновляют положение вопросов, чтобы они имели тот же эффект. Пожалуйста, прочитайте Справочный центр, чтобы узнать, что вы должны и не должны делать на этом веб-сайте.   -  person Sheridan    schedule 25.04.2014
comment
Ответ все тот же... где-то в вашем коде вы используете одно значение enum, которое является общим для всех элементов... вам просто нужно его найти.   -  person Sheridan    schedule 25.04.2014
comment
Хорошо, я извиняюсь, я не знал, что это обновило позицию. Я не буду создавать тот же вопрос снова. вот что происходит, если я просто изменю одну строку, она обновит только одну строку, но когда я перейду к изменению другой строки, строка, которую я только что изменил, также изменит предыдущую, если вы меня понимаете? так что в основном это похоже на то, что он делает это в выбранной строке предыдущей   -  person user3428422    schedule 25.04.2014
comment
Где определено ваше свойство DeploymentType?... Я предполагаю, что это не в вашем классе элементов.   -  person Sheridan    schedule 25.04.2014
comment
Само перечисление находится в собственном классе с другим пространством имен. Но свойство DeploymentType определено в классе модели ProductItem. Итак, в основном я могу получить свойство типа развертывания из источника элементов сетки данных, вот в чем, я думаю, проблема.   -  person user3428422    schedule 25.04.2014
comment
Где дубликат? Я мог бы использовать решение этой проблемы.   -  person Eric    schedule 29.06.2016


Ответы (1)


Приносим извинения за дубликаты, но после нескольких часов догадок, потому что в Интернете недостаточно материалов для такого рода вещей, решение таково:

</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
    <DataTemplate>
        <ComboBox ItemsSource="{Binding Source={StaticResource DeploymentTypeEnum}}"
                  SelectedItem="{Binding DeploymentType}"
                  **IsSynchronizedWithCurrentItem="false**">
        </ComboBox>
    </DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>

IsSynchronizedWithCurrentItem - делает то, что написано на банке. Однако, когда вы выберете элемент, текущий элемент исчезнет, ​​но, по крайней мере, не обновит все строки.

person user3428422    schedule 25.04.2014