欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解WPF中值轉(zhuǎn)換器的使用方法

 更新時間:2024年02月11日 08:38:34   作者:Dm_dotnet  
在WPF(Windows Presentation Foundation)中,值轉(zhuǎn)換器(Value Converter)是一種機制,允許你在綁定時轉(zhuǎn)換綁定源和綁定目標之間的值,本文給大家介紹了WPF中值轉(zhuǎn)換器的使用方法,需要的朋友可以參考下

什么是值轉(zhuǎn)換器

在WPF(Windows Presentation Foundation)中,值轉(zhuǎn)換器(Value Converter)是一種機制,允許你在綁定時轉(zhuǎn)換綁定源和綁定目標之間的值。值轉(zhuǎn)換器實現(xiàn)了 IValueConverter 接口,該接口包含兩個方法:ConvertConvertBack。這兩個方法分別用于在綁定源到目標時進行值轉(zhuǎn)換,以及在目標到源時進行值轉(zhuǎn)換。

使用值轉(zhuǎn)換器的Demo

首先創(chuàng)建一個綁定數(shù)據(jù)源類:

using System;
using System.ComponentModel;
?
namespace BindConversion
{
    public class MyData : INotifyPropertyChanged
    {
        private DateTime _thedate;
?
        public MyData()
        {
            _thedate = DateTime.Now;
        }
?
        public DateTime TheDate
        {
            get { return _thedate; }
            set
            {
                _thedate = value;
                OnPropertyChanged("TheDate");
            }
        }
?
        // Declare event
        public event PropertyChangedEventHandler PropertyChanged;
        // OnPropertyChanged method to update property value in binding
        private void OnPropertyChanged(string info)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(info));
        }
    }
}

有一個類型為DateTime的屬性TheDate,該類實現(xiàn)了INotifyPropertyChanged接口。

再創(chuàng)建一個轉(zhuǎn)換器類:

using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Media;
?
namespace BindConversion
{
    public class MyConverter : IValueConverter
    {
        public object Convert(object o, Type type,
            object parameter, CultureInfo culture)
        {
            var date = (DateTime) o;
            switch (type.Name)
            {
                case "String":
                    return date.ToString("F", culture);
                case "Brush":
                    return Brushes.Red;
                default:
                    return o;
            }
        }
?
        public object ConvertBack(object o, Type type,
            object parameter, CultureInfo culture) => null;
    }
}

該類實現(xiàn)了IValueConverter接口。

IValueConverter介紹

如果要將值轉(zhuǎn)換器與綁定相關(guān)聯(lián),請創(chuàng)建實現(xiàn) 接口的 IValueConverter 類, Convert 然后實現(xiàn) 和 ConvertBack 方法。 轉(zhuǎn)換器可以將數(shù)據(jù)從一種類型更改為另一種類型,根據(jù)文化信息轉(zhuǎn)換數(shù)據(jù),或修改演示文稿的其他方面。

值轉(zhuǎn)換器具有區(qū)域性感知能力。 ConvertConvertBack 方法都有一個culture參數(shù),用于指示區(qū)域性信息。 如果區(qū)域性信息與轉(zhuǎn)換無關(guān),則可以在自定義轉(zhuǎn)換器中忽略該參數(shù)。

該接口有兩個方法ConvertConvertBack

public object Convert (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture);

中各參數(shù)的含義如下所示:

參數(shù)類型含義
valueobject綁定源生成的值。
targetTypeType綁定目標屬性的類型。
parameterobject要使用的轉(zhuǎn)換器參數(shù)。
cultureCultureInfo要用在轉(zhuǎn)換器中的區(qū)域性。

再看一下MainWindow.xaml:

<Window x:Class="BindConversion.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:BindConversion"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel Width="300" Height="300" Name="Page1">
        <StackPanel.Resources>
            <local:MyData x:Key="MyDataSource"/>
            <local:MyConverter x:Key="MyConverterReference"/>
            <Style TargetType="TextBlock">
                <Setter Property="FontSize" Value="15"/>
                <Setter Property="Margin" Value="3"/>
            </Style>
        </StackPanel.Resources>
?
        <StackPanel.DataContext>
            <Binding Source="{StaticResource MyDataSource}"/>
        </StackPanel.DataContext>
?
        <TextBlock Text="Unconverted data:"/>
        <TextBlock Text="{Binding Path=TheDate}"/>
        <TextBlock Text="Converted data:"/>
        <TextBlock Name="myconvertedtext"
    Foreground="{Binding Path=TheDate,
                         Converter={StaticResource MyConverterReference}}">
            <TextBlock.Text>
                <Binding Path="TheDate"
               Converter="{StaticResource MyConverterReference}"/>
            </TextBlock.Text>
        </TextBlock>
?
    </StackPanel>
</Window>

首先定義了資源:

  <StackPanel.Resources>
            <local:MyData x:Key="MyDataSource"/>
            <local:MyConverter x:Key="MyConverterReference"/>
            <Style TargetType="TextBlock">
                <Setter Property="FontSize" Value="15"/>
                <Setter Property="Margin" Value="3"/>
            </Style>
  </StackPanel.Resources>

一個名為MyDataSource類型為MyData的資源與一個名為MyConverterReference類型為MyConverter的資源。

我們發(fā)現(xiàn)有三處地方用到了Binding

  <Binding Source="{StaticResource MyDataSource}"/>

這種形式我們已經(jīng)見過了。

  <TextBlock Name="myconvertedtext"
    Foreground="{Binding Path=TheDate,
                         Converter={StaticResource MyConverterReference}}">
  <Binding Path="TheDate"
               Converter="{StaticResource MyConverterReference}"/>

注意,這兩處Binding中都出現(xiàn)了Converter。

Converter介紹

通過實現(xiàn) IValueConverter 接口并實現(xiàn) Convert 方法創(chuàng)建轉(zhuǎn)換器。 該方法應(yīng)返回一個對象,該對象的類型與綁定所面向的依賴屬性的類型相同,或者至少返回一個可隱式強制轉(zhuǎn)換或轉(zhuǎn)換為目標類型的類型。

再結(jié)合這段代碼:

 public object Convert(object o, Type type,
     object parameter, CultureInfo culture)
 {
     var date = (DateTime) o;
     switch (type.Name)
     {
         case "String":
             return date.ToString("F", culture);
         case "Brush":
             return Brushes.Red;
         default:
             return o;
     }
 }

根據(jù)目標類型的不同,進行不同的轉(zhuǎn)換。

TextBlock.Foreground的類型為Brush就返回Brushes.Red。

TextBlock.Text的類型為String就返回date.ToString("F", culture)。

結(jié)果如下圖所示:

Demo代碼來源

https://github.com/microsoft/WPF-Samples/tree/main/Data%20Binding/BindConversion

以上就是詳解WPF中值轉(zhuǎn)換器的使用方法的詳細內(nèi)容,更多關(guān)于WPF轉(zhuǎn)換器使用的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳談C# 圖片與byte[]之間以及byte[]與string之間的轉(zhuǎn)換

    詳談C# 圖片與byte[]之間以及byte[]與string之間的轉(zhuǎn)換

    下面小編就為大家?guī)硪黄斦凜# 圖片與byte[]之間以及byte[]與string之間的轉(zhuǎn)換。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • C#通過經(jīng)緯度計算2個點之間距離的實現(xiàn)代碼

    C#通過經(jīng)緯度計算2個點之間距離的實現(xiàn)代碼

    這篇文章主要介紹了C#通過經(jīng)緯度計算2個點之間距離實現(xiàn)代碼,本文對實現(xiàn)原理、經(jīng)緯度基本知識等一并做了講解,需要的朋友可以參考下
    2014-08-08
  • C#圖片按比例縮放實例

    C#圖片按比例縮放實例

    這篇文章主要為大家詳細介紹了C#圖片按比例縮放的實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • C#中參數(shù)個數(shù)可變的方法實例分析

    C#中參數(shù)個數(shù)可變的方法實例分析

    這篇文章主要介紹了C#中參數(shù)個數(shù)可變的方法,以一個簡單實例分析了C#中參數(shù)個數(shù)可變的方法,主要是使用params關(guān)鍵字來實現(xiàn)的,是C#編程中比較實用的技巧,需要的朋友可以參考下
    2014-11-11
  • C#生成二維碼的方法

    C#生成二維碼的方法

    這篇文章主要介紹了C#生成二維碼的方法,包括動態(tài)鏈接庫dll文件的調(diào)用、代碼的實現(xiàn)與使用示例,非常實用,需要的朋友可以參考下
    2014-11-11
  • C#判斷一個字符串是否是數(shù)字或者含有某個數(shù)字的方法

    C#判斷一個字符串是否是數(shù)字或者含有某個數(shù)字的方法

    這篇文章主要介紹了C#判斷一個字符串是否是數(shù)字或者含有某個數(shù)字的方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • 關(guān)于C#10 新特性 Lambda 優(yōu)化

    關(guān)于C#10 新特性 Lambda 優(yōu)化

    這篇文章主要介紹了C# 10 新特性 Lambda 優(yōu)化,C# 10 對于 Lambda 做了很多的優(yōu)化,我們可以在 C# 中更加方便地使用委托和 Lambda 了,下面就來看一些示例,需要的朋友也可以參考一下
    2021-11-11
  • Unity實現(xiàn)圖片生成灰白圖的方法

    Unity實現(xiàn)圖片生成灰白圖的方法

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)圖片生成灰白圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#編程實現(xiàn)發(fā)送郵件的方法(可添加附件)

    C#編程實現(xiàn)發(fā)送郵件的方法(可添加附件)

    這篇文章主要介紹了C#編程實現(xiàn)發(fā)送郵件的方法,具備添加附件的功能,涉及C#文件傳輸及郵件發(fā)送的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • C#實現(xiàn)條形碼識別的解決方案分享

    C#實現(xiàn)條形碼識別的解決方案分享

    主流的識別庫主要有ZXing.NET和ZBar,OpenCV 4.0后加入了QR碼檢測和解碼功能,所以本文主要和大家分享了使用ZBar進行條形碼識別的示例代碼,需要的可以參考一下
    2023-07-07

最新評論