有没有一种方法可以使用DataTemplate定义通过代码创建的Border对象的结构?

时间:2020-07-13 21:20:09

标签: c# xaml uwp binding datatemplate

因此,我目前正在尝试学习如何使用绑定和DataContext来简化应用程序的结构。

我在应用程序中有很多动态创建的控件,这些控件是在运行时使用C#创建的,例如带有文本框的简单边框。数据来自我创建的数据类,在这种情况下为EntryData

数据类

class EntryData : INotifyPropertyChanged
{
    public string EntryID { get; set; }
    public string Title { get; set; }
    public string ColourHex { get; set; }
}

创建控件并将其放入网格

Border outer_border = new Border();
outer_border.Tag = cur_entryData.EntryID;
outer_border.Background = GetSolidColorBrushFromHex(cur_entryData.ColourHex);
outer_border.Style = Application.Current.Resources["bor_EntryCalendarBlock"] as Style;

TextBlock txtblc_title = new TextBlock();
txtblc_title.Style = Application.Current.Resources["txtblc_CalendarBlockTitle"] as Style;
txtblc_title.Text = cur_entryData.Title;

//never got the binding to update

//txtblc_title.DataContext = cur_entryData;    
//Binding bind_title = new Binding();
//bind_title.Source = cur_entryData;
//bind_title.Mode = BindingMode.TwoWay;
//bind_title.Path = new PropertyPath("Title");
//bind_title.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;    
//txtblc_title.SetBinding(TextBlock.TextProperty, bind_title);

outer_border.Child = txtblc_title;

Grid.SetRow(outer_border, entry_row);
Grid.SetColumn(outer_border, entry_col);

my_grid.Children.Add(outer_border);

您可以看到我在控件上使用绑定的尝试,该尝试可以创建控件,但是在EntryData更改后永远不会更新,因此我放弃了它。可以这么说,更新标题,然后转到my_grid.Children中的正确索引,提取边框,提取其子文本块,然后将text属性更改为新值。

创建和更新所有这些控件非常笨拙,但是我不知道其他任何方法。我已经读过一些有关使用数据内容来设置按钮和列表视图中的条目样式的信息,但是我希望使用Border(或技术上是Grid)作为外层,因为它使这种类型的控件更易于创建和修改。

有没有办法做这样的事情

xaml

<Page.Resources>
    <DataTemplate x:Key="control_template_test" x:DataType="local:EntryData">
        <TextBlock Text="{x:Bind Title}"/>
    </DataTemplate>
</Page.Resources>

C#

Border new_border = new Border();

new_border.ContentTemplate = this.Resources["control_template_test"] as DataTemplate;
new_border.DataContext = cur_entryData;

我可以使用按钮来实现此功能,但不能使用边框或网格,因为按钮具有.Content属性。同样,即使使用按钮,在EntryData更新时,我也无法更新文本块。另外,我想在边框中添加细节,例如使用标签来保持entryID,易于访问和背景颜色。我不知道如何使用DataTemplate来实现。

有人可以给我一些帮助吗?我已经尝试搜索了几个小时,却没有找到任何可能的解释。

编辑:

为澄清起见,我理解这种尝试在边框上使用ContentTemplate的尝试可能不会存在。我正在寻求帮助,以不同的解决方案实现类似目标。假设我创建了一个带有边框和文本块的模板控件,并且每当我需要时,我都可以创建一个将数据绑定到数据类的控件。理想情况下,此数据绑定将在数据类更新时进行更新,但是在我之前尝试时不会进行更新。

0 个答案:

没有答案