首页 > 解决方案 > 无法将用户控件(视图)分配给我的 ContentControl,始终为空

问题描述

我有一个 WPF 应用程序,我试图在我的主窗口中显示一个动态用户控件。为此,我有一个ContentControl并将其绑定到一个名为MyFooView的属性,该属性的类型为FooView

当我的主窗口的构造函数被调用时,我将 FooView 分配给我的 UserControl,如下所示:

//using statements above...
//public class MainWindowViewModel, implements INotifyPropertyChanged

public FooView MyFooView
{
    get
    {
        return _myfooView;
    }
    set
    {
        if (_myfooView!= null)
        {
            _myfooView= value;
            RaisePropertyChanged(nameof(MyFooView));
        }
    }
}
private FooView _myfooView;

public MainWindowViewModel()
{
   MyFooView = new FooView(...); //takes in parameters
   //at this point MyFooView is (null)
}

我的 Xaml:

   <Grid Grid.Row="1" Margin="30,0" Width="880">
        <ContentControl Content="{Binding MyFooView}"/>
        <Rectangle Stroke="Black" StrokeThickness="2"/>
    </Grid>

无论什么 MyFooView 始终为空。因此,我期望看到我的视图的空间是空的。谁能帮我理解我做错了什么?提前谢谢了!

标签: c#wpf

解决方案


它始终为 null,因为您在 setter 中有一个 null 检查。当字段为 null 时,您不能为属性分配值,但该字段从 null 开始。

更改自:

public FooView MyFooView
{
    get
    {
        return _myfooView;
    }
    set
    {
        if (_myfooView!= null)
        {
            _myfooView= value;
            RaisePropertyChanged(nameof(MyFooView));
        }
    }
}

至:

public FooView MyFooView
{
    get
    {
        return _myfooView;
    }
    set
    {
        _myfooView= value;
        RaisePropertyChanged(nameof(MyFooView));
    }
}

或者,您可以对 执行空检查value,这可能是您打算开始的操作,如下所示:

public FooView MyFooView
{
    get
    {
        return _myfooView;
    }
    set
    {
        if (value!= null)
        {
            _myfooView= value;
            RaisePropertyChanged(nameof(MyFooView));
        }
    }
}

推荐阅读