gpt4 book ai didi

c# - 将 View 模型创建为 DataContext 与创建为 StaticResource 的值(value)是什么

转载 作者:行者123 更新时间:2023-11-30 12:22:29 25 4
gpt4 key购买 nike

this WPF tutorial在级别 2 中,作者在 Window.Resources 中创建 viewModel,如下所示:

<Window.Resource>
<local:myViewModel x:Key="viewmodel"/>
</Window.Resource>

并使用 {Binding myValue, Source={StaticResource myViewModel}} 绑定(bind)每个值,但是其他类似的教程将 Window.DataContext 设置为 viewModel,如下所示:

<Window.DataContext>
<local:myViewModel />
</Window.DataContext>

然后使用 {Binding myValue} 简单地绑定(bind)值。

我的问题是:它们之间是否存在明显差异,或者这是用户偏好?

最佳答案

存在语义差异。

  • 如果多个控件引用静态资源,它们都引用同一个对象。
  • 如果将 UI 元素的 DataContext 设置为模型类的实例,则每个元素都会获得自己的实例。

为了说明,考虑这个模型类:

public class Model
{
private static int counter;

private readonly int id;

public Model()
{
id = counter++;
}

public override string ToString()
{
return id.ToString();
}
}

...以及一些使用它的 XAML 片段:

<Window.Resources>
<wpf:Model x:Key="ModelResource"/>
</Window.Resources>
...
<StackPanel HorizontalAlignment="Center" Margin="20" Orientation="Horizontal">
<Button Content="{StaticResource ModelResource}" />
<Button Content="{StaticResource ModelResource}" />
<Button Content="{Binding}">
<Button.DataContext>
<wpf:Model />
</Button.DataContext>
</Button>
<Button Content="{Binding}">
<Button.DataContext>
<wpf:Model />
</Button.DataContext>
</Button>
<Button Content="{StaticResource ModelResource}" />
</StackPanel>

输出:

enter image description here

关于c# - 将 View 模型创建为 DataContext 与创建为 StaticResource 的值(value)是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40835959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com