2015-02-03 2 views
5

Так что я снова смущен здесь.DataGrid SelectedItem не обновляется

Я создал datagrid, связал его источник товаров двумя способами и связал свой выбранный элемент двумя способами. Выбранный элемент getter вызывается, но сеттер никогда не делает этого. Все фигуры, кажется, здесь. Что мне не хватает?

<DataGrid ItemsSource="{Binding Properties ,Mode=TwoWay}" 
        SelectedItem="{Binding SelectedProperty ,Mode=TwoWay}" 
        CanUserDeleteRows="False" CanUserAddRows="False" AutoGenerateColumns="False" Background="LightBlue"> 

    <DataGrid.Columns> 
     <DataGridTextColumn IsReadOnly="True" Header="Address" Binding="{Binding Address}"/> 
    </DataGrid.Columns> 
    <DataGrid.RowDetailsTemplate> 
    <DataTemplate> 
     <DataGrid ItemsSource="{Binding Units ,Mode=TwoWay}" 
        SelectedItem="{Binding SelectedUnit, Mode=TwoWay}" 
        CanUserDeleteRows="False" CanUserAddRows="False" AutoGenerateColumns="False"> 

Мой первый datagrid работает отлично, включая выбранный элемент.

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

public class PropertyModel : ModelBase 
    { 
    private ObservableCollection<UnitModel> _Units; 

    public ObservableCollection<UnitModel> Units 
    { 
     get { return _Units; } 
     set { _Units = value; } 
    } 
    private UnitModel _SelectedUnit; 

    public UnitModel SelectedUnit 
    { 
     get { return _SelectedUnit; } 
     set { _SelectedUnit = value; OnPropertyChanged("SelectedUnit"); } 
    } 

В окне вывода отсутствуют какие-либо ошибки выражения привязки или любые другие ошибки.

+1

Я обошел мою проблему с помощью двух 'ItemsControl' для моей сетки и некоторые для 'RowHeader' и' ColumnHeader'. Все еще будет intressted, если есть способ сделать это с «DataGrid» – MadddinTribleD

ответ

5

Ответ на это довольно очевидно.

Я забыл поставить UpdateSourceTrigger = PropertyChanged

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

<DataGrid ItemsSource="{Binding Units ,Mode=TwoWay}" 
     SelectedItem="{Binding SelectedUnit,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
     CanUserDeleteRows="False" CanUserAddRows="False" AutoGenerateColumns="False"> 

Это решается проблема

+1

Спасибо, я застрял на этом в течение двух дней. – Guge

1

я столкнулся что-то подобное, что пару месяцев назад, по какой-то причине внутренний DataGridItemSource не был установлен правильно, используя таким образом, мне удалось исправить путем связывания с помощью ElementName установить RowDetail DataGridItemSource к SelectedItem в родительском:

<DataGrid x:Name="DataGrid" ItemsSource="{Binding Properties ,Mode=TwoWay}" 
        SelectedItem="{Binding SelectedProperty ,Mode=TwoWay}" 
        CanUserDeleteRows="False" CanUserAddRows="False" AutoGenerateColumns="False" Background="LightBlue"> 

    <DataGrid.Columns> 
     <DataGridTextColumn IsReadOnly="True" Header="Address" Binding="{Binding Address}"/> 
    </DataGrid.Columns> 
    <DataGrid.RowDetailsTemplate> 
    <DataTemplate> 
     <DataGrid ItemsSource="{Binding SelectedItem.Units ,Mode=TwoWay,ElementName=DataGrid}" 
+1

здесь, что я рассказал вам о http://stackoverflow.com/questions/27131113/rowdetailstemplate-itemsource-binded-to-an-ef-navigationproperty – Usama

+2

Поэтому это решение не будет работать, и вот почему. Проблема не в том, что itemssource не заполняется. Это прекрасно работает. Проблема в том, что свойство, которое выбранный элемент для вложенной сетки не привязан, не задается. Я тестировал ваше решение, включая добавление SelectedItem = {Binding ElementName = PropertiesGrid, Path = SelectedItem, Mode = TwoWay "} Ясно, что если я это сделаю, он может установить правильный выбранный элемент, но он уничтожит любую попытку привязки. else –

Смежные вопросы