2011-04-24 96 views
0

這裏內結合爲用戶控件對我的代碼:獲取用戶控件的DataContext屬性,從控制

<UserControl x:Class="UZ.ActivitySink.GUI.Views.POSsView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"            
    xmlns:Views="clr-namespace:UZ.ActivitySink.GUI.Views"> 
    <DockPanel> 
     <TreeView ItemsSource="{Binding Types}" x:Name="POSTree" Background="{x:Null}" HorizontalAlignment="Left" FontSize="14" 
        Visibility="{Binding DataContext.TreeVisibility, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Views:POSsView}}, Mode=TwoWay}"> 
     </TreeView> 

     <StackPanel x:Name="ErrorPanel" 
        Visibility="{Binding DataContext.ErrorMessageVisibility, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Views:POSsView}}, Mode=TwoWay}" Margin="20"> 
     </StackPanel> 
    </DockPanel> 
</UserControl> 

我分配一個DataContext對象在它的構造控制

DataContext = _viewModel; 

_viewModel有屬性名爲TreeVisibility和ErrorMessageVisibility類型的Visibility,但屏幕上的Visual元素仍然不會將它們的可見性值綁定到這些屬性。

在我的情況下,從xaml聲明引用控件的viewmodel屬性的正確方法是什麼?

謝謝。

回答

0

您的綁定比必要的更復雜。

這一個:

Visibility="{Binding DataContext.TreeVisibility, 
        RelativeSource={RelativeSource FindAncestor, 
        AncestorType={x:Type Views:POSsView}}, Mode=TwoWay}" 

在這種情況下應該是等同於簡單得多

Visibility="{Binding TreeVisibility}" 

這就是說,儘管當前綁定複雜,所以還是應該有工作(至少給出你已經提供的信息)。

如果仍然無法讓它們工作,請在調試器中運行您的應用程序,然後查看「輸出」窗口 - 綁定錯誤默認情況下會在那裏報告,並且它們包含的信息將幫助您找到問題。

+0

謝謝。在我的情況下,它有點複雜,但我設法找出在輸出窗口中查看消息的問題。在我的情況下,TreeView控件具有它自己的DataContext,所以我必須使用初始的「複雜」相對綁定來獲取父級的屬性。至於StackPanel,它能夠引用正確的數據上下文,但該屬性作爲字段被刪除,因此無法找到它。 – 2011-04-24 14:52:11