Связывание DataGrid в C # WPF не работает с наблюдаемой коллекцией - PullRequest
0 голосов
/ 16 октября 2018

У меня есть наблюдаемая коллекция с объектами канала внутри.Я пытался привязать эту коллекцию Observable к DataGrid следующим образом:

XAML:

<DataGrid Grid.Row="1" Grid.ColumnSpan="5" Height="45" Margin="30,10,30,255" ItemsSource="{Binding MGWChannels[0], Source={StaticResource MainWindowViewModel}, Mode=TwoWay}"
                                      AutoGenerateColumns="False" HorizontalAlignment="Stretch" CanUserAddRows="False" RowHeaderWidth="0" >
                                <DataGrid.Columns>
                                    <DataGridTextColumn Header="Max Retries" Width="auto" Binding="{Binding MGWChannels[0].MaxRetries, Source={StaticResource MainWindowViewModel}}" />
                                    <DataGridTextColumn Header="Backoff Time GW Unreachable" Width="auto" Binding="{Binding MGWChannels[0].BotwUnreachable, Source={StaticResource MainWindowViewModel}}"/>
                                    <DataGridTextColumn Header="Backoff Time GW Busy" Width="auto" Binding="{Binding MGWChannels[0].BotwMGWBusy, Source={StaticResource MainWindowViewModel}}"/>
                                    <DataGridTextColumn Header="Backoff Time GW Error" Width="auto" Binding="{Binding MGWChannels[0].BotwMGWError, Source={StaticResource MainWindowViewModel}}"/>
                                    <DataGridTextColumn Header="Strategy" Width="*"/>
                                </DataGrid.Columns>
                            </DataGrid>

Observable Collection в ViewModel:

private ObservableCollection<Channel> _mgwChannels;


public ObservableCollection<Channel> MGWChannels
{
    get
    {
        return this._mgwChannels;
    }
    set
    {
        this._mgwChannels = value;
        RaisePropertyChanged("MGWChannels");

    }
}

К сожалению, это не сработалокак и ожидалось - поскольку в Наблюдаемой Коллекции есть 3 Объекта, я хотел создать 3 DataGrids и связать их с [0], [1] и [2].Без [0] он работает, но помещает все 3 объекта в список, и я хочу отображать только один объект на сетку данных, а не все.

Почему это не работает?Что я упускаю?

1 Ответ

0 голосов
/ 16 октября 2018

Ваш xaml должен выглядеть так, как показано ниже xaml.

  1. Индексатор не требуется, так как вам нужно привязать коллекцию к DataGrid.Если вы хотите отобразить только один объект, вам нужно создать другую коллекцию, имеющую один объект.

  2. При связывании свойства не нужно искать ViewModel, потому что эти свойства должны находиться внутри объекта.коллекции.

    private ObservableCollection<ApplicationUser> firstMGWChannel;
    public ObservableCollection<ApplicationUser> FirstMGWChannel
    
    {
        get
        {
            return new ObservableCollection<ApplicationUser>() { MGWChannels[0] };
        }
    }
    

Xaml -

     <DataGrid Grid.Row="1" Grid.ColumnSpan="5" Height="45" Margin="30,10,30,255" ItemsSource="{Binding FirstMGWChannel, Source={StaticResource MainWindowViewModel}, Mode=TwoWay}"
                                  AutoGenerateColumns="False" HorizontalAlignment="Stretch" CanUserAddRows="False" RowHeaderWidth="0" >
        <DataGrid.Columns>
            <DataGridTextColumn Header="Max Retries" Width="auto" Binding="{Binding MaxRetries }" />
            <DataGridTextColumn Header="Backoff Time GW Unreachable" Width="auto" Binding="{Binding BotwUnreachable }"/>
            <DataGridTextColumn Header="Backoff Time GW Busy" Width="auto" Binding="{Binding BotwMGWBusy }"/>
            <DataGridTextColumn Header="Backoff Time GW Error" Width="auto" Binding="{Binding BotwMGWError }"/>
            <DataGridTextColumn Header="Strategy" Width="*"/>
        </DataGrid.Columns>
    </DataGrid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...