我是wpf的新手,并尝试将静态定义的DataGrid的Items.Count属性绑定到我的自定义控件的Label.
我目前的实现看起来像这样.但标签仍然是空的:我
定义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; }
}
}
Run Code Online (Sandbox Code Playgroud)
CustomControl的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>
Run Code Online (Sandbox Code Playgroud)
我部署自定义控件的XAML
<DataGrid Name="dataGrid1" VerticalAlignment="Top" Width="210">
<DataGrid.Columns>
<DataGridTextColumn Header="header" />
</DataGrid.Columns>
</DataGrid>
<my:BindingNavigator Name="bindingNavigator1" />
</Grid>
Run Code Online (Sandbox Code Playgroud)
EventHandler背后的代码,我填充网格并设置自定义控件的DataGrid属性
private void Window_Loaded(object sender, RoutedEventArgs e)
{
dataGrid1.Items.Add("1");
dataGrid1.Items.Add("2");
bindingNavigator1.DataGrid = dataGrid1;
}
Run Code Online (Sandbox Code Playgroud)
为什么我不能将Items.Count属性绑定到Label?
您需要做的就是将ElementName的值更改为DataGrid的实际名称(即dataGrid1而不是DataGrid).
<Label Width="30" Height="30"
Content="{Binding ElementName=DataGrid, Path=Items.Count}" />
Run Code Online (Sandbox Code Playgroud)
这是一个完整的例子:
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8842 次 |
| 最近记录: |