如何使用自定义模板绑定数据收集

雅库布·库斯纳鲁克(Jakub Kuszneruk)

我想避免滚动ListViewHeader,所以我创建的自定义控制研究的名单,其中包括电网的两行(其中第一个是头和排在第二,我可以放置ListView,但我已经成功地绑定与控制研究头,但我不能对数据做同样的事情。

我的ListViewCustomControl课:

   public sealed class ListViewCustomControl : Control
    {
        public static readonly DependencyProperty HeaderProperty =
            DependencyProperty.Register(
            "Header", typeof(string), typeof(ListViewCustomControl),
            new PropertyMetadata("custom_template_row1"));

        public static readonly DependencyProperty ElementsSourceProperty =
            DependencyProperty.Register(
            "ElementsSource", typeof(IObservable<Type>), typeof(ListViewCustomControl),
            null);


        public ListViewCustomControl()
        {
            DefaultStyleKey = typeof(ListViewCustomControl);
        }

        public string Header
        {
            get { return (string)GetValue(HeaderProperty); }
            set { SetValue(HeaderProperty, value); }
        }

        public IObservable<Type> ElementsSource
        {
            get { return (IObservable<Type>)GetValue(ElementsSourceProperty); }
            set { SetValue(ElementsSourceProperty, value); }
        }
    }

我的控件样式:

<Style TargetType="local:ListViewCustomControl">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:ListViewCustomControl">
                <Grid Background="BlueViolet">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*"></RowDefinition>
                        <RowDefinition Height="*"></RowDefinition>
                    </Grid.RowDefinitions>
                    <TextBlock Text="{TemplateBinding Header}"></TextBlock>
                    <ListView Grid.Row="1"
                              ItemsSource="{TemplateBinding ElementsSource}">
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding TypeVar}"></TextBlock>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

在xaml文件中使用的示例:

        <local:ListViewCustomControl
            Header="yolo" ElementsSource="{Binding data}">
        </local:ListViewCustomControl>

发送的数据和Type定义

private void navigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
    var data = new List<Type>();
    for (var i = 0; i < 123; i++) data.Add(new Type(i));
    defaultViewModel["data"] = data;
}
public class Type
{
    public int TypeVar { get; set; }

    public Type(int i)
    {
        TypeVar = i;
    }
}

正如我在一开始提到的。标头属性运行良好,但我也无法使数据绑定运行良好...

更新

我注意到在调试器中,SetValuefrom的功能XamlTypeInfo.g.cs已被调用一次,仅用于设置Header值。

更新

我已更改IObservableIList,更重要的默认值是ElementsSourceProperty,它适用于默认值,但我仍然无法更改此值...

    public static readonly DependencyProperty ElementsSourceProperty =
        DependencyProperty.Register(
        "ElementsSource", typeof(IList<Type>), typeof(ListViewCustomControl),
        new PropertyMetadata(
            new List<Type>(3)
            {
                new Type(4), new Type(5), new Type(6)
            }));
阿纳托利·尼古拉耶夫(Anatoliy Nikolaev)

尝试更改的类型ElementsSource

IObservable<>

至:

IList<>

像这样:

public static readonly DependencyProperty ElementsSourceProperty =
        DependencyProperty.Register(
        "ElementsSource", typeof(IList<Type>), typeof(ListViewCustomControl),
        null);

public IList<Type> ElementsSource
{
    get { return (IList<Type>)GetValue(ElementsSourceProperty); }
    set { SetValue(ElementsSourceProperty, value); }
}

为了进行测试,请尝试设置ListView名称,并在代码后边写以下行:

MyListView.ElementsSource = data;

Version with Binding

在这种情况下,您必须指定DataContext,希望我们将其列出:

XAML

<local:ListViewCustomControl Header="yolo"
                             ElementsSource="{Binding TestList}" />

Code-behind

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        var testData = new TestData();
        testData.TestList = new List<Type>();

        for (var i = 0; i < 123; i++)
            testData.TestList.Add(new Type(i));

        this.DataContext = testData;
    }
}

public class TestData 
{
    public List<Type> TestList
    {
        get; 
        set; 
    }
}

Some notes

  • 您可以选择的类型IEnumerable,因为它是所有集合的基类。

  • 创建依赖项属性时,可以跳过PropertyMetadata,在这种情况下,系统将自动为此类型分配一个默认值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在自定义指令中绑定数据-AngularJS

来自分类Dev

如何使用自定义模板生成代码?

来自分类Dev

使用ObservableCollection的自定义控件绑定

来自分类Dev

如何添加自定义Sling绑定?

来自分类Dev

angularjs:在ng-repeat中使用“ track by”后,自定义直接绑定数据不再更新

来自分类Dev

自定义附加属性的模板绑定

来自分类Dev

无法将数据从控制器正确绑定到自定义指令模板Angular

来自分类Dev

如何在Swagger中使用自定义模板

来自分类Dev

使用自定义适配器的Android数据绑定

来自分类Dev

使用Android数据绑定时,如何通过xml为自定义设置程序传递多个参数

来自分类Dev

使用自定义绑定时如何更新Knockout ViewModel

来自分类Dev

如何使用数据绑定项控件自定义DataGrid标头

来自分类Dev

如何使用搜索绑定的自定义视图

来自分类Dev

如何使用绑定关闭此自定义模式?

来自分类Dev

如何自定义GCP数据流模板?

来自分类Dev

如果绑定数据为空,则想在md-option中显示自定义文本

来自分类Dev

数据绑定到自定义UserControl

来自分类Dev

如何使用自定义指令访问freemarker模板中的数据?

来自分类Dev

无法将数据从控制器正确绑定到自定义指令模板Angular

来自分类Dev

角度自定义指令数据绑定

来自分类Dev

如何在敲除自定义绑定中设置基于字符串/命名的模板?

来自分类Dev

使用数据注释时如何使用自定义编辑器模板?

来自分类Dev

使用自定义 GridViewItem 模板时如何使用 ItemContainerTransitions?

来自分类Dev

自定义用户控件不绑定数据

来自分类Dev

如何在 Knockout 中的自定义 bindingHandler 中绑定到自定义模板

来自分类Dev

如何使用数据绑定 Linq to SQL 添加自定义字段

来自分类Dev

使用 mvvm 在 xamarin 上绑定数据收集

来自分类Dev

自定义 Href 数据绑定 KnockoutJs

来自分类Dev

如何在模板中使用自定义元素?

Related 相关文章

  1. 1

    在自定义指令中绑定数据-AngularJS

  2. 2

    如何使用自定义模板生成代码?

  3. 3

    使用ObservableCollection的自定义控件绑定

  4. 4

    如何添加自定义Sling绑定?

  5. 5

    angularjs:在ng-repeat中使用“ track by”后,自定义直接绑定数据不再更新

  6. 6

    自定义附加属性的模板绑定

  7. 7

    无法将数据从控制器正确绑定到自定义指令模板Angular

  8. 8

    如何在Swagger中使用自定义模板

  9. 9

    使用自定义适配器的Android数据绑定

  10. 10

    使用Android数据绑定时,如何通过xml为自定义设置程序传递多个参数

  11. 11

    使用自定义绑定时如何更新Knockout ViewModel

  12. 12

    如何使用数据绑定项控件自定义DataGrid标头

  13. 13

    如何使用搜索绑定的自定义视图

  14. 14

    如何使用绑定关闭此自定义模式?

  15. 15

    如何自定义GCP数据流模板?

  16. 16

    如果绑定数据为空,则想在md-option中显示自定义文本

  17. 17

    数据绑定到自定义UserControl

  18. 18

    如何使用自定义指令访问freemarker模板中的数据?

  19. 19

    无法将数据从控制器正确绑定到自定义指令模板Angular

  20. 20

    角度自定义指令数据绑定

  21. 21

    如何在敲除自定义绑定中设置基于字符串/命名的模板?

  22. 22

    使用数据注释时如何使用自定义编辑器模板?

  23. 23

    使用自定义 GridViewItem 模板时如何使用 ItemContainerTransitions?

  24. 24

    自定义用户控件不绑定数据

  25. 25

    如何在 Knockout 中的自定义 bindingHandler 中绑定到自定义模板

  26. 26

    如何使用数据绑定 Linq to SQL 添加自定义字段

  27. 27

    使用 mvvm 在 xamarin 上绑定数据收集

  28. 28

    自定义 Href 数据绑定 KnockoutJs

  29. 29

    如何在模板中使用自定义元素?

热门标签

归档