【发布时间】:2020-01-15 20:28:21
【问题描述】:
我有一个 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 总是为空。因此,我期望看到我的视图的空间是空的。谁能帮我理解我做错了什么?非常感谢!
【问题讨论】:
-
视图模型中不应有视图。那不是 MVVM。使用带有 FooView 的 DataTemplate 来显示 foo 数据。
-
@Clemens 你能给我看一个带参数的例子吗?
-
不确定 "of which requires parameters" 应该是什么意思。您可以从这里开始阅读:Data Templating Overview.
-
我的意思是,如何创建其构造函数采用参数的视图的数据模板?
-
将视图更改为不采用构造函数参数。用属性替换它们,最好是可以绑定到视图模型属性的依赖属性。