1 回答
TA贡献1895条经验 获得超7个赞
您正在构造函数中创建 NewContactWindow 的视图模型,正确地将其分配给 DataContext,并正确地向该事件添加处理程序。不幸的是,您还在资源中创建了相同视图模型的第二个实例,并且您手动设置所有绑定的 Source 属性以使用资源中没有事件处理程序的那个。
Window.DataContext您在构造函数中设置的 是 Window XAML 中任何绑定的默认源。让它做它的事情。Mode=TwoWay我还删除了Bindings to 中的所有冗余内容TextBox.Text,因为该属性已定义为默认情况下所有绑定都是 TwoWay。我认为也没有UpdateSourceTrigger=PropertyChanged做任何必要或有帮助的事情:这会导致 Binding 在每次按下键时更新您的 viewmodel 属性,而不是仅在 TextBox 失去焦点时更新。但是我认为您没有对重要的属性做任何事情;没有验证或任何东西。但是 TextBox.Text是为数不多的实际使用它的地方之一,所以我把它留在了里面。
您应该在其他窗口中删除类似的视图模型资源。它没有任何伤害,但充其量也没有用。在最坏的情况下,这是一个有吸引力的麻烦。用火把它烧死,把骨灰埋在半夜寂寞的十字路口下。
<Window x:Class="Contacts_App.View.NewContactWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Contacts_App.View"
xmlns:vm="clr-namespace:Contacts_App.ViewModel"
mc:Ignorable="d"
Title="New Contact Window" Height="250" Width="350">
<Grid>
<StackPanel
Margin="10">
<Label Content="Name" />
<TextBox
Text="{Binding Contact.Name, UpdateSourceTrigger=PropertyChanged}"
Margin="0,0,0,5"/>
<Label Content="Email" />
<TextBox
Text="{Binding Contact.Email, UpdateSourceTrigger=PropertyChanged}"
Margin="0,0,0,5"/>
<Label Content="Phone Number" />
<TextBox
Text="{Binding Contact.Phone, UpdateSourceTrigger=PropertyChanged}"
Margin="0,0,0,5"/>
<Button
Content="Save"
Command="{Binding SaveNewContactCommand}"/>
</StackPanel>
</Grid>
</Window>
- 1 回答
- 0 关注
- 209 浏览
添加回答
举报