C# 将视图模型指定给数据上下文:视图模型何时覆盖XAML元素?
我正在学习WPF和MVVM。我很好奇在特定情况下会发生什么 假设我的视图模型实现了C# 将视图模型指定给数据上下文:视图模型何时覆盖XAML元素?,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我正在学习WPF和MVVM。我很好奇在特定情况下会发生什么 假设我的视图模型实现了INotifyPropertyChanged,情况是我的代码已经构建了我的视图模型,然后将其分配给我窗口的DataContext 在我将视图模型分配给DataContext时,视图模型中的值可能与XAML元素中的值不同。所以我很好奇哪种价值观会赢 我假设XAML元素会从我的视图模型中提取所有的值,但这似乎不是正在发生的事情。对我的视图模型所做的更改将正确地通知并更新XAML元素。但是在我设置DataContext之
INotifyPropertyChanged
,情况是我的代码已经构建了我的视图模型,然后将其分配给我窗口的DataContext
在我将视图模型分配给DataContext
时,视图模型中的值可能与XAML元素中的值不同。所以我很好奇哪种价值观会赢
我假设XAML元素会从我的视图模型中提取所有的值,但这似乎不是正在发生的事情。对我的视图模型所做的更改将正确地通知并更新XAML元素。但是在我设置DataContext
之前所做的更改不会反映在XAML元素中
有人能证实我的解释是正确的吗?我在谷歌上搜索了很多地方,但没有找到关于这个具体问题的任何信息。然而,这似乎是我的应用程序中的行为。如果有其他人的观点或链接到更详细的讨论,将不胜感激
我很好奇我的视图模型实现了INotifyPropertyChanged
,我的代码构建了我的视图模型,然后将其分配给我的windowsDataContext
问题是,在分配给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}" />