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 關注
- 236 瀏覽
添加回答
舉報