Dro*_*ror 1 data-binding wpf datagrid
我在自定义控件中使用WPF的常规DataGrid。DataGrid的单元格模板内容之一应绑定到自定义控件上的Textblock的Text或DependencyProperty。(如果我可以将其绑定到其中任何一个上,对我来说就足够了)
我尝试使用ElementName进行以下绑定,但是没有用。我不断得到DependencyProperty.UnsetValue-
<DataGridTemplateColumn Header="Test">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentPresenter>
<ContentPresenter.Content>
<MultiBinding Converter="{StaticResource TextToSpecialTextblockConverter}">
<Binding Path="SomeTextOnTheViewModel"/>
<Binding ElementName="SearchBox" Path="Text" Mode="OneWay"/>
</MultiBinding>
</ContentPresenter.Content>
</ContentPresenter>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)
绑定到DependencyProperty也不起作用。
<DataGridTemplateColumn Header="Test">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentPresenter>
<ContentPresenter.Content>
<MultiBinding Converter="{StaticResource TextToSpecialTextblockConverter}">
<Binding Path="SomeTextOnTheViewModel"/>
<Binding RelativeSource="{RelativeSource Mode=TemplatedParent}" Path="SomeDP" />
</MultiBinding>
</ContentPresenter.Content>
</ContentPresenter>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)
我希望有人可以帮助我!
谢谢!
如果属性Property是DataContext在控件上设置的视图模型上定义的,DataGrid则此示例有效:
资源:
<DataTemplate x:Key="template">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Test"/>
<TextBlock Text="{Binding Path=DataContext.Property,RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
</StackPanel>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
数据网格
<DataGrid ItemsSource="{Binding Items}" ...>
<DataGrid.Columns>
<DataGridTemplateColumn CellTemplate="{StaticResource template}" />
Run Code Online (Sandbox Code Playgroud)
DependencyProperty更改通知可以更新视图模型。
例如:
public static readonly DependencyProperty TestProperty =
DependencyProperty.Register("Test", typeof (string), typeof (DataGridComboBoxColumn), new PropertyMetadata(default(string), PropertyChangedCallback));
public string Test
{
get { return (string) GetValue(TestProperty); }
set { SetValue(TestProperty, value); }
}
private static void PropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
{
((MyControl) dependencyObject).OnTestChanged();
}
private void OnTestChanged()
{
((MyViewModel) theGrid.DataContext).Property = Test;
}
Run Code Online (Sandbox Code Playgroud)
为了Test使用模板绑定绑定到依赖项属性,请使用this
<DataTemplate x:Key="template2">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Test: "/>
<TextBlock Text="{Binding Path=Test, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type local:CustomControl1}}}"/>
</StackPanel>
</DataTemplate>
<Style TargetType="{x:Type local:CustomControl1}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomControl1}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<DataGrid ItemsSource="{TemplateBinding ItemsSource}" AutoGenerateColumns="True">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Test" CellTemplate="{StaticResource template2}" />
</DataGrid.Columns>
</DataGrid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
CustomControl1在哪里
public class CustomControl1 : ItemsControl
{
static CustomControl1()
{
DefaultStyleKeyProperty.OverrideMetadata(
typeof (CustomControl1),
new FrameworkPropertyMetadata(typeof (CustomControl1)));
}
public static readonly DependencyProperty TestProperty =
DependencyProperty.Register("Test", typeof (string), typeof (CustomControl1), new PropertyMetadata(default(string)));
public string Test
{
get { return (string) GetValue(TestProperty); }
set { SetValue(TestProperty, value); }
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14955 次 |
| 最近记录: |