WPF是一个数据驱动模式,开发中都是以数据为中心,WPF具有数据绑定机制,数据有变化时,会通知UI进行更新。
WPF用的是MVVM模式
MVVM是Model-View-ViewModel(模型-视图-视图模型)的缩写形式。具体可以参考百度百科https://baike.baidu.com/item/MVVM/96310?fr=aladdin
关于转换器的使用场景
直接上图更直观
像这种根据不同的值,改变颜色,样式,显示内容都可以使用转换器
后台代码
/// <summary>
/// 不同值颜色转换器
/// </summary>
[ValueConversion(typeof(string), typeof(SolidColorBrush))]
public class DataColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
try
{
if (value == null || value.ToString() == "")
return "";
支付查询返回对象 obj = value as 支付查询返回对象;
if (obj.return_msg == "支付成功")
{
return new SolidColorBrush(Colors.Green);
}
return new SolidColorBrush(Colors.Black);
}
catch (Exception ex)
{
Utility.Command.ErrorLog(new Json.ErrorLog { msg = ex.Message, level = 0 });
//Utility.Command.WriteLog(ex.Message);
return new SolidColorBrush(Colors.Black);
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
/// <summary>
/// 支付金额转换器
/// </summary>
public class DataFormaterConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null || value.ToString() == "")
return "";
else
return Double.Parse(value.ToString()) / 100;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
/// <summary>
/// 支付方式转换器
/// </summary>
public class DataPayConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null || value.ToString() == "")
return "";
else
return System.Enum.Parse(typeof(EnumList.PaymentStyle), value.ToString());
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
关于ConVert和ConVertBack,如果是双向绑定的话就需要实现ConVertBack,否则不用实现
前端代码
<transducer:DataColorConverter x:Key="DataColorConverterStyle"/>
<transducer:DataFormaterConverter x:Key="DataFormaterConverterStyle"/>
<transducer:DataPayConverter x:Key="DataPayConverterStyle"/>
<DataGridTemplateColumn Width="0.2*" Header="金额">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding total_fee, Converter={StaticResource DataFormaterConverterStyle}}" Foreground="Red" TextAlignment="Center" VerticalAlignment="Center">
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="0.2*" Header="交易状态">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding return_msg}" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="{Binding Path=., Converter={StaticResource DataColorConverterStyle}}">
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn ElementStyle="{StaticResource ResourceKey=dgCell}" Header="支付方式" Width="0.2*" Binding="{Binding pay_type,Converter={StaticResource DataPayConverterStyle}}"/>
因为模式不同,虽然也可以用winform的方法实现,但是更复杂,用wpf就必须转换思维模式,不然就会很吃亏。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)