c# - 无法将用户控件(视图)分配给我的 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 始终为空。因此,我期望看到我的视图的空间是空的。谁能帮我理解我做错了什么?提前谢谢了!
解决方案
它始终为 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));
}
}
}