开发者

Get UserControl DataContext properties to bind to from within the control

开发者 https://www.devze.com 2023-02-28 15:29 出处:网络
Here is the code for me UserControl: <UserControl x:Class=\"UZ.ActivitySink.GUI.Views.POSsView\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"

Here is the code for me UserControl:

<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:Vi开发者_运维技巧ews="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>

I am assigning a datacontext object to the control in it's constructor

DataContext = _viewModel;

_viewModel has the properties named TreeVisibility and ErrorMessageVisibility of type Visibility, but still the Visual elements on the screen don't bind their visibility values to these properties.

What is the correct way to reference the controls' viewmodel properties from xaml declaration in my case?

Thank you.


Your bindings are more complicated than necessary.

This one:

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

in this case should be equivalent to the much simpler

Visibility="{Binding TreeVisibility}"

That said, even though the current bindings are complicated they should still have worked (at least given the information you already provide).

If you still can't get them to work, run your app in the debugger and look at the Output window -- binding errors are reported there by default, and they contain information that will help you get to the root of the problem.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号