WPF中的值绑定转换
来源:互联网 发布:网络大电影收片 编辑:程序博客网 时间:2024/06/06 05:03
在写程序中经常遇到这样的情况:本示例代码下载地址
点一个按钮,另外一个按钮或者几个被禁用掉,点另外的按钮,被禁用的按钮又恢复正常,平常的处理方法是在按钮点击事件中直接对其他按钮的IsEnable属性赋值来处理。但有时候复杂的情况导致我们常常担心这样的写法过于复杂,就几个按钮和一些控件的状态,我们能不能只管写逻辑代码,不去管这么多控件的ENABLE和DISABNLE呢?使用WPF中的绑定值转换可以达到这样的效果,举例说明:
如图中的三个按钮
点击修改:修改按钮:disable,取消按钮:enable,保存按钮:enable
点击取消:修改按钮:enable,取消按钮:disable,保存按钮:disable
点击保存:修改按钮:enable,取消按钮:disable,保存按钮:disable
利用WPF中的值绑定转换:转换部分的代码如下:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Data;namespace WPF_BindingTest{ public class OperationTypeConverter:IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { bool result = false; if (parameter.ToString().Equals("Save"))//是save按钮 { switch (value.ToString()) { case "Mod": result = true; break; case "None": result = false; break; default: result = false; break; } } else if (parameter.ToString().Equals("Cancel"))//取消按钮 { switch (value.ToString()) { case "Mod": result = true; break; case "None": result = false; break; default: result = false; break; } } else//修改按钮 { switch (value.ToString()) { case "Mod": result = false; break; case "None": result = true; break; default: result = false; break; } } return result; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }}
界面部分XAML代码如下:
<Window x:Class="WPF_BindingTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WPF_BindingTest" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <local:OperationTypeConverter x:Key="OpConverter"></local:OperationTypeConverter> </Window.Resources> <Grid> <Button Content="修改" Command="{Binding ModCommand}" IsEnabled="{Binding CurrentStatus, Converter={StaticResource OpConverter}, ConverterParameter=Mod}" Name="btnMod" HorizontalAlignment="Left" Margin="69,208,0,0" VerticalAlignment="Top" Width="75"/> <Button Content="取消" Command="{Binding CancelCommand}" IsEnabled="{Binding CurrentStatus, Converter={StaticResource OpConverter}, ConverterParameter=Cancel}" Name="btnCancel" HorizontalAlignment="Left" Margin="176,208,0,0" VerticalAlignment="Top" Width="75"/> <Button Content="保存" Command="{Binding SaveCommand}" IsEnabled="{Binding CurrentStatus, Converter={StaticResource OpConverter}, ConverterParameter=Save}" Name="btnSave" HorizontalAlignment="Left" Margin="286,208,0,0" VerticalAlignment="Top" Width="75"/> </Grid></Window>
ViewModel代码:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.ComponentModel;using System.Windows.Input;namespace WPF_BindingTest{ public class MainWindowVM:INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string name) { if (this.PropertyChanged != null) { this.PropertyChanged(this, new PropertyChangedEventArgs(name)); } } public MainWindowVM() { ModCommand = new CommonCommand(Modify); CancelCommand = new CommonCommand(Cancel); SaveCommand = new CommonCommand(Save); } #region 属性 private OperationStatus currentStatus = OperationStatus.None; public OperationStatus CurrentStatus { get { return this.currentStatus; } set { this.currentStatus = value; OnPropertyChanged("CurrentStatus"); } } private ICommand modCommand; public ICommand ModCommand { get { return this.modCommand; } set { this.modCommand = value; OnPropertyChanged("ModCommand"); } } private ICommand cancelCommand; public ICommand CancelCommand { get { return this.cancelCommand; } set { this.cancelCommand = value; OnPropertyChanged("CancelCommand"); } } private ICommand saveCommand; public ICommand SaveCommand { get { return this.saveCommand; } set { this.saveCommand = value; OnPropertyChanged("SaveCommand"); } } #endregion #region 方法 private void Modify(object para) { CurrentStatus = OperationStatus.Mod; } private void Cancel(object para) { CurrentStatus = OperationStatus.None; } private void Save(object para) { CurrentStatus = OperationStatus.None; } #endregion } public enum OperationStatus { None, Mod, }}
0 0
- WPF中的值绑定转换
- WPF中的绑定杂记
- WPF 中的数据绑定
- WPF 绑定中的TargetNullValue
- WPF 参照WPF实现Silverlight中的多值绑定特性
- WPF中绑定转换IValueConverter
- WPF 使用值转换器进行绑定数据的转换IValueConverter
- WPF中的属性绑定 binding
- WPF 控件中的数据绑定
- WPF/UWP 绑定中的 UpdateSourceTrigger
- 【WPF】ComboBox:根据绑定选取、设置固定集合中的值
- 参照WPF实现Silverlight中的多值绑定特性
- 参照WPF实现Silverlight中的多值绑定特性
- Windows Presentation Foundation(WPF)中的数据绑定(控件与控件值的绑定)
- WPF中的命令与命令绑定(二)
- WPF中的命令与命令绑定(一)
- WPF中的命令与命令绑定(二)
- WPF中的命令与命令绑定(一)
- JSON字符串和JSON对象的转换方式
- Java数据库连接池学习
- Struts2的ognl与JSP的el表达式取值问题
- Unity NGUI 未知Error
- [编程题]判断两个IP是否属于同一子网
- WPF中的值绑定转换
- 带发行版 Logo 的系统信息显示工具
- VS C#工程引用
- QT项目四:扫雷游戏
- Servlet乱码解决
- 1497: [NOI2006]最大获利
- Unity NGUI 关于选中UI
- 读取Java中配置文件的两种方式
- Search for a Range