WPF基础之元素绑定

 元素绑定

数据绑定最简单的形式是源对象是WPF元素而且源属性是依赖项属性。依赖项属性具有内置的更改通知支持。因此当源对象中改变依赖属性的值时,会立即更新目标对象中的绑定属性。

 绑定表达式

当使用绑定表达式时,不必对源对象做任何改动,只需配置源对象使其属性具有正确的值范围。
<Slider Grid.Row="0" Name="sliderFontSize" Margin="3" Minimum="1" Maximum="40" Value="10" TickFrequency="1" TickPlacement="TopLeft"> 
</Slider> <TextBlock Grid.Row="1" Margin="10" Text="Simple Text" Name="lblSimpleText"FontSize="{Binding ElementName=sliderFontSize,Path=Value}"> </TextBlock>

 绑定错误

WPF不会引发异常来通知与数据绑定相关的问题。如果指定的元素或属性不存在,那么不会收到任何的指示;相反,只是不能在目标属性中显示数据。
调试可通过Visual Studio的OutPut窗口查看,WPF会输出绑定细节的跟踪信息。

 绑定模式

名称说明
OneWay当源属性变化时更新目标属性。
TwoWay当源属性变化时更新目标属性,并且当目标属性变化时更新源属性。
OneTime最初根据源属性设置目标属性,然而,其后的所有改变都会被忽略。通常如果知道属性不会变化,可通过这种模式降低开销。
OneWayToSource与OneWay相反,当目标属性变化时更新源属性。
Default此类绑定依赖于目标属性,既可以是双向的,也可以是单向的。除非明确指定了一种绑定模式,否则所有绑定使用该方法

 使用代码创建绑定

Binding binding = new Binding();
binding.Source = sliderFontSize;
binding.Path = new PropertyPath("Value");
binding.Mode = BindingMode.TwoWay;
lblSimpleText.SetBinding(TextBlock.FontSizeProperty,binding);

 多绑定

可以设置TextBlock元素从文本框中获取文本,从单独的颜色列表中选择当前前景色和背景色,等等。
      <TextBlock Grid.Row="1" Margin="10" Name="lblSimpleText"
                   FontSize="{Binding ElementName=sliderFontSize,Path=Value}"
                   Text="{Binding ElementName=txtContent,Path=Text}"
                   Foreground="{Binding ElementName=lstColors,Path=SelectedItem.Tag}"> 
        </TextBlock>
还可链接数据绑定。例如TextBox.Text属性创建表达式以链接到TextBlock.FontSize属性,而TextBlock.FontSize又链接到Slider.Value属性的绑定表达式。

 绑定更新

源的变化会立即影响目标,然而反向的传递从目标到源未必会立即发生。他们的行为由Binding.UpdateSourceTrigger属性控制。
 
名称
说明
PropertyChanged当目标属性变化时立即更新源。
LostFocus当目标属性变化并且目标属性失去焦点时跟新源。
Explicit除非调用BindingExpression.UpdateSource()方法,否则无法更新源。
Default根据目标属性的元素确定更新行为。大多数属性的默认行为是PropertyChanged,但TextBox.Text属性的默认行为是LostFocus
表中列出的值不影响目标的更新方式,他们仅控制OneWay或OneWayToSource模式的绑定中源的更新方式。

 绑定延迟

用户停止输入500毫秒后更新源对象  
<TextBox Text="{Binding ElementName=txtSampleText,Path=FontSize,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Delay=500}" Name="txtFontSize">
</TextBox>

 绑定到非元素对象

WPF数据绑定基础结构不能获取私有信息或公有字段,必须是公有属性中。
绑定到非元素对象时,需要放弃Binding.ElementName属性,并使用以下属性之一。
  • Source:该属性是指向源对象的引用,提供数据的对象。
  • RelativeSource:这是引用,使用RelativeSource对象指向源对象。有了这个附加层,在在当前元素的基础上构建引用。这似乎增加了复杂程度,
 但实际上RelativeSource属性是一种特殊工具,当编写控件模版及数据模版时是很方便的。
  • DataContext:如果没有使用Source或RelativeSource属性指定源,WPF就从当前元素开始在元素树中向上查找。检查每个属性的DataContext属性,并使用第一个飞空的DataContext属性。
当将同一个对象的多个属性绑定到不同的元素时,DataContext属性是非常有用的,因为可在更高层次的容器对象上,设置DataContext属性。

 Source

绑定到静态对象
  <TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"></TextBlock>

2.绑定到资源

 <Window.Resources>
        <FontFamily x:Key="CoustomFont">Calibri</FontFamily>
    </Window.Resources>
    <Grid>
        <TextBlock Text="{Binding Source={StaticResource CoustomFont},Path=Source}"></TextBlock>
    </Grid>

 RelativeSource

<TextBlock Text="{Binding Path=Title,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}}}"></TextBlock>
RelativeSource对象使用FindAncestor模式,该模式告知查找元素树知道发现AncestorType属性定义的元素类型。
FindAncestor模式有4种。
名称                 
说明
Self表达式绑定到同一元素的另一个属性上。
FindAncestor表达式绑定到父元素。WPF将查找元素树直至发现期望的父元素。为了指定父元素,还必须设置AncestorType属性以指示希望查找的父元素类型。此外,还可以用AncestorLevel属性略过发现的一定的数量的特定元素。例如当一棵树中查找时,如果希望绑定到第三个ListBoxItem类型的元素,应当使用如下设置,AncestorType={x:Type ListBoxItem};并且AncestorLevel=3,从而略过前连个ListBoxItem元素。默认值是1,并在找到第一个匹配的元素停止查找。
PreviousData表达式绑定到数据绑定列表中前一个数据项。在列表中使用这种模式。
TemplateParent表达式绑定到应用模版的元素。只有当绑定位于控件模版或数据模版内部时,这种模式才能工作。

 DataContext属性

 大量元素绑定到同一对象。
<TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"></TextBlock>
 <TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"></TextBlock>
 <TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"></TextBlock>

可以改成如下

<StackPanel DataContext="x:Static SystemFonts.IconFontFamily">
        <TextBlock Text="{Binding Path=Source}"></TextBlock>
        <TextBlock Text="{Binding Path=Source}"></TextBlock>
        <TextBlock Text="{Binding Path=Source}"></TextBlock>
 </StackPanel>

 

转载于:https://www.cnblogs.com/lovezhangyu/p/10208381.html

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值