Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将视图模型指定给数据上下文:视图模型何时覆盖XAML元素?_C#_Wpf_Xaml_Mvvm - Fatal编程技术网

C# 将视图模型指定给数据上下文:视图模型何时覆盖XAML元素?

C# 将视图模型指定给数据上下文:视图模型何时覆盖XAML元素?,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我正在学习WPF和MVVM。我很好奇在特定情况下会发生什么 假设我的视图模型实现了INotifyPropertyChanged,情况是我的代码已经构建了我的视图模型,然后将其分配给我窗口的DataContext 在我将视图模型分配给DataContext时,视图模型中的值可能与XAML元素中的值不同。所以我很好奇哪种价值观会赢 我假设XAML元素会从我的视图模型中提取所有的值,但这似乎不是正在发生的事情。对我的视图模型所做的更改将正确地通知并更新XAML元素。但是在我设置DataContext之

我正在学习WPF和MVVM。我很好奇在特定情况下会发生什么

假设我的视图模型实现了
INotifyPropertyChanged
,情况是我的代码已经构建了我的视图模型,然后将其分配给我窗口的
DataContext

在我将视图模型分配给
DataContext
时,视图模型中的值可能与XAML元素中的值不同。所以我很好奇哪种价值观会赢

我假设XAML元素会从我的视图模型中提取所有的值,但这似乎不是正在发生的事情。对我的视图模型所做的更改将正确地通知并更新XAML元素。但是在我设置
DataContext
之前所做的更改不会反映在XAML元素中

有人能证实我的解释是正确的吗?我在谷歌上搜索了很多地方,但没有找到关于这个具体问题的任何信息。然而,这似乎是我的应用程序中的行为。如果有其他人的观点或链接到更详细的讨论,将不胜感激

我很好奇我的视图模型实现了
INotifyPropertyChanged
,我的代码构建了我的视图模型,然后将其分配给我的windows
DataContext

问题是,在分配给
DataContext
的阶段,XAML元素中的值可能与视图模型不匹配。那么谁赢了


根据我的测试,似乎XAML元素中已有的值获胜。如果我想将其设置为视图模型中的值,我必须以某种方式进行设置,或者让视图模型发送一个新的属性更改通知。

听起来像是更改数据模板以显示硬编码的值,而不是绑定提供的默认值

例如,在TextBlock中,只能通过绑定语法(其中值来源于DataContext)或静态值来分配Text属性一次

<TextBlock Text="{Binding Path=Display}"/> <- only uses the DataContext
<TextBlock Text="123"/> <- only shows the static value

您可以发布一个示例来展示您的绑定吗?当您设置绑定时,XAML控件的属性如何保存任何值?没有
@HeySatan这样的东西:代码太多了。我需要考虑如何重写它,以适合这里的形式演示。@Jai:我没有在XAML中设置属性值。但它似乎被设置为
null
。当我附加数据上下文时,即使我的视图模型有数据,它似乎仍然被设置为
null
。一旦设置了DataContext,就应该重新评估绑定。你能举一个简单的例子说明这种情况不会发生吗?谢谢,但事实似乎并非如此。我在标记中没有默认值。如上所述,我可以更新我的数据,并且它正确地反映在控件中。而且没有错误。它只是在我分配数据上下文时没有拾取当前值。在应用数据上下文时是否读取相关属性上的getter?抱歉,我一直很难弄清楚WPF的确切功能。我试着设置断点,但我似乎得到了一连串的点击。比我想象的要多。
<TextBlock Text="{Binding Path=Display}">
  <TextBlock.Text>
    123
  </TextBlock.Text>
</TextBlock>
<TextBlock Text="{Binding Path=Display, FallbackValue=123}" />