绑定到类型绑定的DependencyProperty

时间:2016-06-24 12:38:43

标签: c# wpf xaml mvvm data-binding

编程器, 我需要在运行时更改ItemsSource Binding。 在我的DataGrid中,我想看到类型为“Akte”的项目。 ViewModel中的此代码有效:

    #region DependencyProperty AktenDataGrid
    public static readonly DependencyProperty AktenDataGridProperty =
        DependencyProperty.Register("AktenDataGrid", typeof(DataGrid), typeof(UebersichtVM));

    public DataGrid AktenDataGrid
    {
        get { return (DataGrid)GetValue(AktenDataGridProperty); }
        set
        {
            SetValue(AktenDataGridProperty, value);
            OnPropertyChanged();
        }
    }
    #endregion DependencyProperty AktenDataGrid

    private void OnSammelakteChangedCommand(object parameter)
    {
        Binding aktenBinding;

        if (null == AktenDataGrid || null == parameter)
        {
            aktenBinding = new Binding("AngemeldeterBenutzer.AktenBenutzer");
        }
        else
        {
            aktenBinding = new Binding("SelectedItem.Sammelakte.SammelakteAkten");
            aktenBinding.ElementName = "sammelaktenDataGrid";
        }

        AktenDataGrid.SetBinding(DataGrid.ItemsSourceProperty, aktenBinding);
    }

通过更改sammelaktenDataGrid中的选择来执行该命令。 有必要在UserControl的Code-Behind中使用受影响的DataGrid初始化Property AktenDataGrid。

我想改变我的ViewModel方式,它提供了Type Binding的DependencyProperty AktenDataGridBinding,我想将ItemSource绑定到这个Property。 我尝试了,但它不起作用。 你能救我吗?

1 个答案:

答案 0 :(得分:0)

我不清楚你要完成什么,但也许就是这样:

这将在SelectedItem.Sammelakte.SammelakteAkten中显示DataGrid,除非它是null,在这种情况下,它会显示AngemeldeterBenutzer.AktenBenutzer

<DataGrid ItemsSource="{Binding Path=SelectedItem.Sammelakte.SammelakteAkten, ElementName=sammelaktenDataGrid}">
    <DataGrid.Style>
        <Style TargetType="DataGrid">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=SelectedItem.Sammelakte.SammelakteAkten}" Value="{x:Null}">
                    <Setter Property="ItemsSource" Value="{Binding Path=AngemeldeterBenutzer.AktenBenutzer}" />
                </DataTrigger>                                     
            </Style.Triggers>
        </Style>
    </DataGrid.Style>            
</DataGrid>