我有一個mvvm框架,非常像Josh Smith的示例。問題是我剛剛發現每次顯示視圖模型時,出於某種原因,相關的視圖構造函數都會觸發TWICE。這是在應用程序的其他地方搞砸了。當然,在這兩種情況下,調用堆棧都是空的,外部的,所以我不知道誰在做'新的'。我知道這不是我,我不會在任何地方「新」觀點。它不是重複的數據模板,因爲它甚至不允許重複的模板。當顯示視圖模型時,兩個視圖變得越來越新了
1)我怎樣才能找出誰在刷新視圖?
2)我怎樣才能迷上新視角模型之間的「魔力」,以及WPF自動幕後的幕後人物如何使用視圖並將視圖新聞?
更多信息:
就像約什 - 史密斯的例子,我有一個視圖模型的視圖相關聯的DataTemplates。就像喬什史密斯一樣,我有一組綁定到選項卡控件的視圖模型。當一個新的視圖模型被創建並添加到該集合中時,魔術盒會使用xaml中的數據模板來指出視圖,魔術盒會消息視圖,將視圖的datacontext綁定到我的視圖模型,並出現一個新選項卡。所有這些都發生在.net的幕後。我從來沒有新的看法。我只是新的視圖模型,然後將其添加到集合。
DOWN縮小到問題XAML:
如果我使用組合框,出於某種原因,導致從項目集合是的ViewModels的列表中創建一個新的視圖。但是如果我使用菜單,則不會創建額外的視圖。
<!--
<ComboBox Name="TabMenus" ItemsSource="{Binding RelativeSource= {RelativeSource FindAncestor, AncestorType={x:Type lc:MultiStepPanel}}, Path=Items}" Width="15" Height="15" Margin="2" >
<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem" >
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<TextBlock Text="{Binding VisibleDisplayName}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
-->
<Menu Name="TabMenus" Style="{StaticResource TabMenuDropDownStyle}" >
<MenuItem Style="{StaticResource TabMenuButtonStyle}"
ItemsSource="{Binding RelativeSource= {RelativeSource FindAncestor, AncestorType={x:Type lc:MultiStepPanel}}, Path=Items}"
ItemContainerStyle="{StaticResource TabMenuItem}" />
</Menu>
兩個控件都有完全相同的ItemsSource xaml。爲什麼組合會觸發新視圖?
在構造函數中拋出異常。我敢打賭,當VS遇到它時,它會加載一個xaml文件。 – Will
你在哪裏啓動ViewModel? – jcvegan
在這裏沒有足夠的信息,任何人都可以幫助你。 WPF不會爲你實例化一個視圖,你必須告訴它哪個視圖使用(並實例化)*,如果你不知道這是怎麼回事,也不能解釋給我們,那就是沒辦法,我們可以幫助你。 – CodingGorilla