相关疑难解决方法(0)

如何在不创建ViewModel对象的情况下指定DataContext(ViewModel)类型以在XAML编辑器中进行设计时绑定检查?

我可以像这样指定DataContext:

<Window ... >
    <Window.DataContext>
        <MainViewModel />
    </Window.DataContext>
    ...
</Window>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,WPF将创建一个MainViewModel类型的对象,并将其分配给窗口的DataContext属性(这发生在Window的InitializeComponent()方法中).

但是如果我ViewModel没有默认构造函数怎么办呢.或者,如果我想初始化ViewModel并在Window.InitializeComponent()执行后将其分配给DataContext (在Window的构造函数内或从实例化窗口的相同代码中) - 在这种情况下,WPF创建一个ViewModel(内部InitializeComponent()),将其分配给窗口的DataContext,然后我用另一个ViewModel实例覆盖它(我担心这里不必要的对象实例化).

我希望能够只指定一种类型ViewModel,所以如果我在{Binding}中拼错一个属性名称(或重命名属性后),我会得到设计时警告,或者我可以通过点击(在XAML中转到声明) )在{Binding PropertyName}内的属性名称上.

谢谢你无价的时光.

c# wpf xaml mvvm

42
推荐指数
1
解决办法
3万
查看次数

如何在XAML编辑器中查看设计时数据绑定(它在运行时工作)?

我的数据绑定版本号如下所示:

<Window <!-- ... --> DataContext="{Binding RelativeSource={RelativeSource Self}}">
    <Grid>
        <TextBlock>
            Version is: 
            <Run Text="{Binding Version, Mode=OneWay}"></Run>
            and advancing...
        </TextBlock>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

它在运行期间正在运行.

如何在Visual Studio 2012的XAML编辑器中在设计时看到它?我只看到:

Version is: and advancing...
Run Code Online (Sandbox Code Playgroud)

代替:

Version is: 5.2.2 and advancing...
Run Code Online (Sandbox Code Playgroud)

编辑 - 我的解决方案:

下面的Jure的答案有效,但我最终使用了虚拟视图模型静态代码技术,这对我来说更好,因为数据是真实视图模型类型的模拟:

d:DataContext="{Binding Source={StaticResource DesignViewModel}}" ...
Run Code Online (Sandbox Code Playgroud)

data-binding wpf xaml design-time visual-studio

26
推荐指数
2
解决办法
3万
查看次数

标签 统计

wpf ×2

xaml ×2

c# ×1

data-binding ×1

design-time ×1

mvvm ×1

visual-studio ×1