WPF數據模板中綁定事件不觸發問題


  今天比較閑,做一個練手的項目,結果在xaml中寫了一個用戶的數據模板后,在其中的某個Canvas上綁定了一個鼠標左擊的事件,結果調試的時候,無論怎么點擊都不跳到斷點那里,百思不得其解。

之后嘗試不綁定事件,直接采用內聯事件的寫法,將事件寫在控件上,並且事件的處理寫在cs代碼而非ViewModel中,則可以使用,如此可以判斷是采用MVVM時,命令沒有成功綁定到事件上。

剛開始以為是DevExpress的MVVM框架的BUG。后來改成自己手寫的MVVM,並未解決問題,思考再三,覺得是數據模板並未獲取到DataContext導致,於是將Canvas綁定的命令做了如下修改,將Canvas的數據上下文明確為最上層父節點的數據上下文,修改后問題解決,經過思考覺得是窗體資源不會被窗體的上下文所修飾,個人見解,並未驗證

修改前:

<Canvas Width="350" Height="80">
                    <dxmvvm:Interaction.Triggers>
                        <dxmvvm:EventToCommand EventName="MouseLeftButtonDown"  
                                               Command="{Binding ClickChatWindowToSomeOne}"  
                                               PassEventArgsToCommand="True"/>
                    </dxmvvm:Interaction.Triggers>
                    <Image Width="60" Height="60" Canvas.Top="30" Canvas.Left="20">
                        <Image.Source>
                            <MultiBinding Converter="{StaticResource imageconveter}">
                                <Binding Path="headimg"/>
                                <Binding Path="sex"/>
                            </MultiBinding>
                        </Image.Source>
                    </Image>
                    <Canvas Background="LightPink">
                        <TextBlock Text="{Binding uname}" Canvas.Left="100" Canvas.Top="40" FontSize="15" Foreground="Black" FontWeight="Bold">
                        </TextBlock>
                        <TextBlock Text="{Binding describe}"  Canvas.Left="100" Canvas.Top="70" FontSize="10" Foreground="Black"/>
                        <StackPanel Orientation="Horizontal" Canvas.Top="40" Canvas.Left="220">
                            <Image Source="image/location.png" Width="40" Height="40"/>
                            <TextBlock Text="{Binding lastlocal}" FontSize="10" FontWeight="Bold" VerticalAlignment="Center"></TextBlock>
                        </StackPanel>
                    </Canvas>
                    <Separator Margin="0, 5, 0, 5"/>
                </Canvas>

修改后:{修改后的AncestorType是調用此數據模板的父節點}

<Canvas Width="350" Height="80">
                    <dxmvvm:Interaction.Triggers>
                        <dxmvvm:EventToCommand EventName="MouseLeftButtonDown"  
                                               Command="{Binding DataContext.ClickChatWindowToSomeOne,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ItemsControl}}"  
                                               PassEventArgsToCommand="True"/>
                    </dxmvvm:Interaction.Triggers>
                    <Image Width="60" Height="60" Canvas.Top="30" Canvas.Left="20">
                        <Image.Source>
                            <MultiBinding Converter="{StaticResource imageconveter}">
                                <Binding Path="headimg"/>
                                <Binding Path="sex"/>
                            </MultiBinding>
                        </Image.Source>
                    </Image>
                    <Canvas Background="LightPink">
                        <TextBlock Text="{Binding uname}" Canvas.Left="100" Canvas.Top="40" FontSize="15" Foreground="Black" FontWeight="Bold">
                        </TextBlock>
                        <TextBlock Text="{Binding describe}"  Canvas.Left="100" Canvas.Top="70" FontSize="10" Foreground="Black"/>
                        <StackPanel Orientation="Horizontal" Canvas.Top="40" Canvas.Left="220">
                            <Image Source="image/location.png" Width="40" Height="40"/>
                            <TextBlock Text="{Binding lastlocal}" FontSize="10" FontWeight="Bold" VerticalAlignment="Center"></TextBlock>
                        </StackPanel>
                    </Canvas>
                    <Separator Margin="0, 5, 0, 5"/>
                </Canvas>

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM