Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何为WPF属性制作模板?_C#_Wpf_Templates_Properties - Fatal编程技术网

C# 如何为WPF属性制作模板?

C# 如何为WPF属性制作模板?,c#,wpf,templates,properties,C#,Wpf,Templates,Properties,在我的WPF XAML表单上,我有很多元素绑定到我的属性 对于每个属性,我将执行以下步骤: <TextBlock Grid.Column="0" Grid.Row="0" Name="TB11" Text="{Binding TBX11}" VerticalAlignment="Center" HorizontalAlignment="Center" DataContext="{Binding RelativeSource={Relati

在我的WPF XAML表单上,我有很多元素绑定到我的属性

对于每个属性,我将执行以下步骤:

<TextBlock Grid.Column="0" Grid.Row="0" Name="TB11" Text="{Binding TBX11}" 
            VerticalAlignment="Center" HorizontalAlignment="Center" 
            DataContext="{Binding RelativeSource={RelativeSource Self}}" />
我现在甚至不知道我需要在这里写多少次同样的东西,但我不知道我是否能让它变得更简单?因为我需要从这里设置的是WPF块名和绑定名

我不知道我是否能让它变得更容易

您可以像这样使用MVVM框架

Caliburn将允许您将XAML重写为

 <TextBlock Grid.Column="0" Grid.Row="0" Name="TB11"  
        VerticalAlignment="Center" HorizontalAlignment="Center"/> 

有几种方法可以减少重复:

  • 引入用户控件以减少重复的XAML和C#代码。有关更多详细信息,请参阅
  • 如果您有一个相同UI元素的列表,则使用
    ItemsControl
    itemstemplate
    创建重复的元素
  • 我发现您的代码存在一些问题:

  • 在您的
    OnCaptionPropertyChanged
    方法中设置
    TextBlock.Text
    ,您不应该这样做-此绑定将负责更新
  • TBX11
    属性中,如果调用此方法
    OnPropertyChanged(“TBX11”)
    ,则不应向依赖项属性的getter或setter添加任何逻辑。不能保证这些将被调用
  • 您的
    TextBlock.DataContext
    设置为自身,因此
    Text
    绑定将无法工作
    我真的不建议仅仅为了消除一些重复而向复杂的MVVM框架添加依赖项。WPF框架本身可以解决这个问题。
     <TextBlock Grid.Column="0" Grid.Row="0" Name="TB11"  
            VerticalAlignment="Center" HorizontalAlignment="Center"/>