WPF祖先绑定

时间:2015-08-10 13:42:12

标签: c# wpf

我错误地得到了这个错误?

 xmlns:local="clr-namespace:TestSome.Views"

 <Button Grid.Row="0" Content="Button" Command="{Binding CloseInstanceCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:CFDOpenPositionsView}}}" 
HorizontalAlignment="Left" Height="29.709" Margin="359.292,0,0,0" Style="{DynamicResource ButtonStyle4}" VerticalAlignment="Top" Width="66.728" Background="#FFDDDDDD" Visibility="Visible"/>

System.Windows.Data Error: 40 : BindingExpression path error: 'CloseInstanceCommand' property not found on 'object' ''CFDOpenPositionsView' (Name='')'. BindingExpression:
Path=CloseInstanceCommand; DataItem='CFDOpenPositionsView' (Name=''); target element is 'Button' (Name=''); target property is 'Command' (type 'ICommand')

Class CFDOpenPositionView具有CloseInstanceCommand属性...

enter image description here

1 个答案:

答案 0 :(得分:1)

RelativeSource绑定将返回UI元素。您需要指定该属性位于DataContext对象上:

<Window.DataContext>
    <local:MainViewModel/>
</Window.DataContext>


<Grid>
    <!-- Definition of Rows and Columns -->
    <Grid.RowDefinitions>
        <RowDefinition Height="100" />
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="250" />
    </Grid.RowDefinitions>

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="150"/>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="250" />
    </Grid.ColumnDefinitions>

    <!-- Header -->
    <StackPanel Grid.Row="0" Grid.ColumnSpan="6">

        <TextBlock Text="RFM DATA ANALYZER" Margin="20" HorizontalAlignment="Center" FontSize="36" FontWeight="Thin"  />

    </StackPanel>


    <!-- Tabs -->
    <StackPanel Grid.Row="1" Grid.RowSpan="4" Grid.Column="0"  Grid.ColumnSpan="5">
        <TabControl  TabStripPlacement="Top">
            <TabItem Header="Dashboard">
                <Border BorderBrush="White" BorderThickness="1">
                    <Grid>

                        <Grid.RowDefinitions>
                            <RowDefinition Height="*" />
                            <RowDefinition Height="*" />
                            <RowDefinition Height="*" />
                            <RowDefinition Height="*" />
                        </Grid.RowDefinitions>

                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="150" />
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>

                        <StackPanel Grid.Row="0" Grid.RowSpan="4" Grid.Column="0" Grid.ColumnSpan="1">
                            <TextBlock Text="Data" Margin="0 50 0 20" HorizontalAlignment="Left" FontFamily="Segoe UI Semibold" FontSize="15" Foreground="LightGray" />
                            <ListBox >
                                <ListBoxItem Content="Data 00" />
                                <ListBoxItem Content="Data 01" />
                                <ListBoxItem Content="Data 03" />
                            </ListBox>
                        </StackPanel>

                        <oxy:PlotView Model="{Binding Model1}" Background="Transparent" Grid.Row="0" Grid.RowSpan="4" Grid.Column="1"  Grid.ColumnSpan="1" />
                        <oxy:PlotView Model="{Binding Model2}" Background="Transparent" Grid.Row="0" Grid.RowSpan="4" Grid.Column="2"  Grid.ColumnSpan="1" />
                        <oxy:PlotView Model="{Binding Model3}" Background="Transparent" Grid.Row="0" Grid.RowSpan="4" Grid.Column="3"  Grid.ColumnSpan="1" />
                        <oxy:PlotView Model="{Binding Model4}" Background="Transparent" Grid.Row="0" Grid.RowSpan="4" Grid.Column="4"  Grid.ColumnSpan="1" />

                    </Grid>
                </Border>

            </TabItem>

            <TabItem Header="Housekeeping" Height="40">
                <Border BorderBrush="White" BorderThickness="1">
                    <Grid>
                        <Grid.ColumnDefinitions>
etc.