1 回答

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊
您正在構(gòu)造函數(shù)中創(chuàng)建 NewContactWindow 的視圖模型,正確地將其分配給 DataContext,并正確地向該事件添加處理程序。不幸的是,您還在資源中創(chuàng)建了相同視圖模型的第二個(gè)實(shí)例,并且您手動(dòng)設(shè)置所有綁定的 Source 屬性以使用資源中沒有事件處理程序的那個(gè)。
Window.DataContext您在構(gòu)造函數(shù)中設(shè)置的 是 Window XAML 中任何綁定的默認(rèn)源。讓它做它的事情。Mode=TwoWay我還刪除了Bindings to 中的所有冗余內(nèi)容TextBox.Text,因?yàn)樵搶傩砸讯x為默認(rèn)情況下所有綁定都是 TwoWay。我認(rèn)為也沒有UpdateSourceTrigger=PropertyChanged做任何必要或有幫助的事情:這會(huì)導(dǎo)致 Binding 在每次按下鍵時(shí)更新您的 viewmodel 屬性,而不是僅在 TextBox 失去焦點(diǎn)時(shí)更新。但是我認(rèn)為您沒有對(duì)重要的屬性做任何事情;沒有驗(yàn)證或任何東西。但是 TextBox.Text是為數(shù)不多的實(shí)際使用它的地方之一,所以我把它留在了里面。
您應(yīng)該在其他窗口中刪除類似的視圖模型資源。它沒有任何傷害,但充其量也沒有用。在最壞的情況下,這是一個(gè)有吸引力的麻煩。用火把它燒死,把骨灰埋在半夜寂寞的十字路口下。
<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 關(guān)注
- 231 瀏覽
添加回答
舉報(bào)