设计时空引用错误

本文关键字:引用 错误 | 更新日期: 2023-09-27 17:51:01

在我的WPF应用程序中,我用

引用组合框的选定值
{Binding Source={x:Reference myComboBox} ,Path=SelectedItem}

我在DataGrid Columns中这样做。

在设计时(而不是运行时)抛出空引用异常。是否有任何方法来解决这个问题,或者我可以访问选定的项目以外的方式?

下拉列表框:

<ComboBox         x:Name="myComboBox"
                  ItemsSource="{Binding MyItems}"
                  DisplayMemberPath="Name"
                  SelectedItem="{Binding SelectedItem}"
                   />

DataGridTextColumn:

<DataGridTextColumn HeaderStyle="{DynamicResource myStyle}"  Visibility="{Binding Source={x:Reference myComboBox} ,Path=SelectedItem, Converter={StaticResource ConvertSomething}, ConverterParameter={StaticResource Something}}" Header="MyHeader " Width="*" Binding="{Binding Path=MyBindingName}" />

设计时空引用错误

在这种情况下,尝试使用继承DataContext的冷冻类型的proxy。现在我们不需要引用ComboBox因为我们有一个属性在DataContext中。我认为,这是一个更通用的解决方案:

BindingProxy

public class BindingProxy : Freezable
{
    #region Overrides of Freezable
    protected override Freezable CreateInstanceCore()
    {
        return new BindingProxy();
    }
    #endregion
    public object Data
    {
        get 
        {
            return (object)GetValue(DataProperty); 
        }
        set
        {
            SetValue(DataProperty, value);
        }
    }
    public static readonly DependencyProperty DataProperty = DependencyProperty.Register("Data",
                                                                                typeof(object),
                                                                                typeof(BindingProxy));
}

XAML

<DataGrid>
    <DataGrid.Resources>
        <local:BindingProxy x:Key="bindingProxy" Data="{Binding}" />
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn Visibility="{Binding Path=MySelectedItem, 
                                                 Converter={StaticResource ConvertSomething}, 
                                                 ConverterParameter={StaticResource Something}}" 
                                                 Source={StaticResource bindingProxy}}" />
    </DataGrid.Columns>
</DataGrid>

何不试试{Binding ElementName=myComboBox ,Path=SelectedItem}