WPF - Связывание элементов таблицы данных. Считать метку пользовательских элементов управления - PullRequest
4 голосов
/ 11 ноября 2010

я новичок в wpf и пытаюсь привязать свойство Items.Count статического определенного DataGrid к метке моего пользовательского элемента управления.

Моя текущая реализация выглядит следующим образом. Но этикетка остается пустой: I

Класс, в котором определена DataGrid:

public class BindingNavigator : Control
{
    private static DataGrid dataGrid;

    static BindingNavigator()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(BindingNavigator), new FrameworkPropertyMetadata(typeof(BindingNavigator)));
    }

    public DataGrid DataGrid
    {
        set { dataGrid = value; }
        get { return dataGrid; }
    }
}

XAML пользовательского элемента управления, где Items.Count должен отображаться в метке

<Style TargetType="{x:Type local:BindingNavigator}">
   <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:BindingNavigator}">
                <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                    <Grid MinWidth="210" MinHeight="50">
                        <Label Width="30" Height="30" Content="{Binding ElementName=DataGrid, Path=Items.Count}" />
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

XAML, где я развернул свой пользовательский элемент управления

    <DataGrid Name="dataGrid1" VerticalAlignment="Top" Width="210">
        <DataGrid.Columns>
            <DataGridTextColumn Header="header" />
        </DataGrid.Columns>
    </DataGrid>
    <my:BindingNavigator Name="bindingNavigator1" />
</Grid>

Код позади EventHandler, где я заполняю сетку и устанавливаю свойство DataGrid пользовательского элемента управления

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        dataGrid1.Items.Add("1");
        dataGrid1.Items.Add("2");

        bindingNavigator1.DataGrid = dataGrid1;
    }

Почему я не могу привязать свойство Items.Count к метке?

Ответы [ 2 ]

9 голосов
/ 12 ноября 2010

Все, что вам нужно сделать, это изменить значение ElementName на фактическое имя DataGrid (т.е. dataGrid1 вместо DataGrid).

    <Label Width="30" Height="30" 
Content="{Binding ElementName=DataGrid, Path=Items.Count}" />

Вот полностью рабочий пример:

  <Grid>
        <Grid.Resources>
            <Style TargetType="{x:Type local:BindingNavigator}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type local:BindingNavigator}">
                            <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                                <Grid MinWidth="210" MinHeight="50">
                                    <Label Width="30" Height="30" 
Content="{Binding ElementName=dataGrid1, Path=Items.Count}" />
                                </Grid>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

        </Grid.Resources>
        <StackPanel>
            <DataGrid Name="dataGrid1" VerticalAlignment="Top" Width="210">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="header" />
                </DataGrid.Columns>
            </DataGrid>
            <local:BindingNavigator x:Name="bindingNavigator1" />
        </StackPanel>
    </Grid>
1 голос
/ 19 августа 2014

Я нашел, что это работает для меня ...

    <Style.Triggers>
        <DataTrigger Binding="{Binding Items.Count, RelativeSource={RelativeSource Self}}" Value="0">
            <Setter Property="Background">
                <Setter.Value>
                    <VisualBrush Stretch="None">
                        <VisualBrush.Visual>
                            <TextBlock Text="We did't find any matching records for your search..." FontSize="16" FontWeight="SemiBold" Foreground="LightCoral"/>
                        </VisualBrush.Visual>
                    </VisualBrush>
                </Setter.Value>
            </Setter>
        </DataTrigger>
    </Style.Triggers>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...