WPF, MVVM привязка строк данных - PullRequest
0 голосов
/ 12 июля 2011

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

Фрагменты кода:

<DataGrid AutoGenerateColumns="False" Grid.Column="1" Grid.Row="1" SelectionMode="Single" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding PersonList}" CanUserSortColumns="True" SelectedItem="{Binding Path=SelectedPerson}" >
            <DataGrid.Columns>
                <DataGridTextColumn Header="FirstName" Width="100" Binding="{Binding FirstName}" />
                <DataGridTextColumn Header="LastName" Width="100" Binding="{Binding LastName}" />
                <DataGridTemplateColumn Width="140" Header="Operator">
                    <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                        <ComboBox ItemsSource="{Binding Path=OperatorList}" DisplayMemberPath="FullName" SelectedValue="{Binding Path=SelectedOperator}" />
                            </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn> 
                ...
</DataGrid>

Выше приведен фрагмент кода из представления:

У каждого человека в списке есть своя собственная модель представления с приведенным ниже фрагментом кода:

CollectionView _operatorList;
public CollectionView DebtorAgentList { get { return _operatorList; } }

Model.Operator _selectedOperator;
public Model.Operator SelectedOperator
{...}

Теперь у меня проблема в том, что привязка SelectedValue не работает, и я не могуработать почему?Но что делает его сложным или отличным (возможно), так это то, что каждая строка в сетке данных имеет свою собственную модель представления, то есть, другими словами, сетку данных моделей представления.Итак, что происходит, так это то, что FirstName, LastName и Combobox заполнены правильно, но я не могу связать SelectedValue?PS Это не из-за некоторой орфографической ошибки, если есть орфографические ошибки, потому что я переименовал методы, когда писал вопрос и т. Д.

Дальнейшие детали:

Приведенный выше Datagrid является частью представления, котороеимеет свою собственную модель представления, эта модель представления заполняет вышеупомянутую сетку данных списком людей, каждый человек по сути является моделью представления (ну, на самом деле это не модель представления, но, опять же, скорее модель представления, чем модель плоскости).Он работает так, как мне нужно, пока я не попытаюсь связать атрибут SelectedView?

Может кто-нибудь сказать мне, почему это связывание может не работать?

Заранее спасибо: D

Ответы [ 2 ]

0 голосов
/ 14 июля 2011

Я нашел эту статью , которая помогла мне разобраться :) вместо использования столбца шаблона я использовал DataGridComboBoxColumn, как показано ниже:

<DataGrid AutoGenerateColumns="False" Grid.Column="1" Grid.Row="1" SelectionMode="Single" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding PersonList}" CanUserSortColumns="True" SelectedItem="{Binding Path=SelectedPerson}" >
        <DataGrid.Columns>
            <DataGridTextColumn Header="FirstName" Width="100" Binding="{Binding FirstName}" />
            <DataGridTextColumn Header="LastName" Width="100" Binding="{Binding LastName}" />
            <DataGridComboBoxColumn Header="Operator" DisplayMemberPath="FullName" Width="150" SelectedValueBinding="{Binding Path=SelectedOperator}" >
                <DataGridComboBoxColumn.ElementStyle>
                <Style TargetType="ComboBox">
                    <Setter Property="ItemsSource" Value="{Binding Path=OperatorList}" />
                </Style>
                </DataGridComboBoxColumn.ElementStyle>
                <DataGridComboBoxColumn.EditingElementStyle>
                    <Style TargetType="ComboBox">
                        <Setter Property="ItemsSource" Value="{Binding Path=OperatorList}" />
                    </Style>
                </DataGridComboBoxColumn.EditingElementStyle>
            </DataGridComboBoxColumn>
            ...
</DataGrid>

Остальные остались прежними,Спасибо всем:)

0 голосов
/ 12 июля 2011

Используйте SelectedValuePath, а затем «SelectedValue», чтобы выбрать любой элемент в коллекции, см. Следующий код: -

<ComboBox ItemsSource="{Binding Path=OperatorList}" DisplayMemberPath="FullName" SelectedValuePath="SelectedOperator" SelectedValue="{Binding SelectedOperator}" />   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...