WPF Tile=” 变量 UI 双向绑定”x:Class=Problem/
這里最大的感慨,學技術,特別是編程技術,切不可急躁,不求甚解!!! </TextBox>
內容提要:
1.實現INotifyPropertyChanged (MSDN)接口,UI控件的雙向數據綁定
簡單的控件數據綁定并不是難題,但我想實習“后臺”數據改變的同時,UI控件與數據一起改變,卻出現了只能綁定初始值,后臺實時修改后的值無法在UI界面顯現。那肯定是代碼有問題,程序是死的,只有代碼是血淋淋的~~
2.轉換器IValueConverter(MSDN)接口的實現雙向數據綁定
因為想要寫一個簡單的ColorDialog練練綁定,結果悲劇的是我只能得到初始顏色,執行代碼改變了顏色Ui卻無視我一直改變的量~~
內容:
環境:win7+vs2010 + framework 3.5 (sp1否不能確定了)
(運行時)
點擊+,兩個數據控件綁定的值會++--10,按鈕的背景色的R,G,B會改變,這里要多按基礎。程序只是示例,代碼短不優化
MainWindow.xaml:
<Window x:Class="WpfTest.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:src="clr-namespace:WpfTest"Title="MainWindow" Height="350" Width="525"><Window.Resources><src:ColorBrushConverter x:Key="colorBrushConverter"/></Window.Resources><Grid Name="grid"><!--Slider與TextBox同時綁定了A_int變量--><Slider Height="23" HorizontalAlignment="Left" Value="{Binding Path=A_int,Mode=TwoWay}" Margin="12,12,0,0" Name="slider1" VerticalAlignment="Top" Width="248" Maximum="100" /><TextBox Height="23" HorizontalAlignment="Right" Text="{Binding Path=A_int,Mode=TwoWay}" Margin="0,12,117,0" Name="textBox1" VerticalAlignment="Top" Width="120" /><!--兩個Button可以改變A_int變量的值,同時也改變A_Color變量的值--><Button Content="+" Height="25" HorizontalAlignment="Right" Margin="0,53,290,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" Background="{Binding Path=A_Color, Converter={StaticResource colorBrushConverter}}" /><Button Content="-" Height="23" HorizontalAlignment="Left" Margin="40,53,0,0" Name="button2" VerticalAlignment="Top" Width="75" Click="button2_Click" Background="{Binding Path=A_Color, Converter={StaticResource colorBrushConverter}}" /></Grid> </Window>MainWindow.xaml.cs:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.ComponentModel;namespace WpfTest {/// <summary>/// MainWindow.xaml 的交互邏輯/// </summary>public partial class MainWindow : Window{public date d=new date();public MainWindow(){ InitializeComponent();d.A_int=10;d.A_Color=Colors.Black;grid.DataContext=d;}private void button1_Click(object sender, RoutedEventArgs e){d.A_int += 10;d.A_Color = Color.FromArgb((byte)255, (byte)(d.A_Color.R + 10), (byte)(d.A_Color.G + 10), (byte)(d.A_Color.B + 1));}private void button2_Click(object sender, RoutedEventArgs e){d.A_int -= 10;d.A_Color = Color.FromArgb((byte)255, (byte)(d.A_Color.R - 10), (byte)(d.A_Color.G - 10), (byte)(d.A_Color.B - 1));}}public class date : INotifyPropertyChanged//實現接口,詳細表述MSDN{ public event PropertyChangedEventHandler PropertyChanged;private int a_int;public int A_int{get { return a_int; }set{if (value == a_int) return;a_int = value;this.FirePropertyChanged("A_int");}}public Color a_Color;public Color A_Color{get { return a_Color; }set{if (value == a_Color) return;a_Color = value;this.FirePropertyChanged("A_Color");}}private void FirePropertyChanged(string propertyName) {if (this.PropertyChanged != null){this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));}} }/// <summary>/// SolidColorBrush與color的轉化/// </summary>[ValueConversion(typeof(Color), typeof(SolidColorBrush))]public class ColorBrushConverter : IValueConverter//實現接口,詳細表述MSDN{public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture){Color color = (Color)value;return new SolidColorBrush(color);}public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture){return null;}}}關于實現INotifyPropertyChanged (MSDN)接口,數據綁定
<Slider Height="23" HorizontalAlignment="Left" Value="{Binding Path=A_int}" Margin="12,12,0,0" Name="slider1" VerticalAlignment="Top" Width="248" Maximum="100" /><TextBox Height="23" HorizontalAlignment="Right" Text="{Binding Path=A_int,Mode=TwoWay}" Margin="0,12,117,0" Name="textBox1" VerticalAlignment="Top" Width="120" />這是兩個被綁定的控件,我修改了Slider 的綁定代碼
Value="{Binding Path=A_int}"
這里我改了代碼運行,結果是Slider 成功的雙向綁定了數值,可能TwoWay是Mode的默認值
?
轉換器IValueConverter(MSDN)接口的實現雙向數據綁定
這里查了很多資料,實驗了很多代碼,但多數都失敗了,更失敗的是我沒有總結失敗的原因,沒有錯誤的代碼,只要寫錯代碼的人。
<Window x:Class="WpfTest.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:src="clr-namespace:WpfTest"Title="MainWindow" Height="350" Width="525"><Window.Resources><src:ColorBrushConverter x:Key="colorBrushConverter"/></Window.Resources>這里是定義轉換器,可能查到的wpf的代碼太老,很多的Resources定義的代碼都無效,后面使用Background="{Binding Path=A_Color, Converter={StaticResource colorBrushConverter}}"就可以順利綁定的,同樣也沒有Mode=TwoWay…
xmlns:src="clr-namespace:WpfTest"
<src:ColorBrushConverter x:Key="colorBrushConverter"/>
這里,我的vs總是報錯,我奇怪了很久。哎,這次真不是我的錯了,更新一下,有時更新也繼續報錯,那么,按F5吧!
上班時間到挺久了,繼續碼代碼…
轉載于:https://www.cnblogs.com/SongSharp/archive/2011/06/17/2083606.html
總結
以上是生活随笔為你收集整理的WPF Tile=” 变量 UI 双向绑定”x:Class=Problem/的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle数据库与Access互导实例
- 下一篇: hahahahahah