【问题标题】:Bind to DependencyProperty of Type Binding绑定到类型绑定的 DependencyProperty
【发布时间】:2016-06-24 12:38:42
【问题描述】:

程序员, 我需要在运行时更改 ItemsSource 绑定。 在我的 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 初始化属性 AktenDataGrid。

我想更改我的 ViewModel 的方式,它提供类型绑定的 DependencyProperty AktenDataGridBinding 并且我想将 ItemSource 绑定到此属性。 我试过了,但它不起作用。 你能帮帮我吗?

【问题讨论】:

  • 我可以想象现在有多少人将@MarkusHütter 的评论复制/粘贴到谷歌翻译中...... :) - 仅供参考,它(不太好)翻译成英文:“提示:我总是会编程用英语。所以类/变量/函数名称。使它更容易,非德语的人理解你的代码"
  • @Markus 另一个小技巧,StackOverflow 上的 cmets(作为问题和答案)应该始终使用英语,以便任何人都可以关注。
  • 哈哈,抱歉=)
  • 不要将代码放入依赖属性的 CLR 包装器中。
  • 作为 H.B.说,您不应该将除 GetValue/SetValue 之外的代码放在依赖属性的 CLR 包装器中。原因在 MSDN 文章XAML Loading and Dependency Properties 中有说明。在这种特殊情况下,它甚至完全是多余的,因为您不需要为依赖属性引发 PropertyChanged 事件。它们带有自己的更改通知机制。

标签: c# wpf xaml mvvm data-binding


【解决方案1】:

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

这将在DataGrid 中显示SelectedItem.Sammelakte.SammelakteAkten,除非它是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>

【讨论】:

  • 我尝试了一些变化,包括。更改绑定并将比较值更改为 x:Type。似乎什么都没有触发。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-01
相关资源
最近更新 更多