110,539
社区成员
发帖
与我相关
我的任务
分享
<Window x:Class="..." />
</Window.Resources>
<StackPanel>
<CheckBox IsChecked="{Binding m_iRemoteCtrl, Converter={StaticResource RemoteCtrlTypeConverter}}">Remote Control</CheckBox>
<TextBox Text="{Binding m_iRemoteCtrl, Converter={StaticResource RemoteCtrlTypeConverter}}" />
<TextBox Text="观察类型转换" />
</StackPanel>
</Window>
public class RemoteCtrlTypeConverter : IValueConverter
{
// 转换成其他类型
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is ERemoteCtrlType)
{
ERemoteCtrlType remoteControlType = (ERemoteCtrlType)value;
// Checkbox需要一个bool, 或者一个bool?(当他支持三状态的时候)
if (targetType == typeof(bool) || targetType == typeof(bool?))
{
return remoteControlType == ERemoteCtrlType.ERemoteCtrlType_Remote;
}
// TextBox需要一个string
if (targetType == typeof(string))
{
return System.Convert.ToString(remoteControlType, culture);
}
}
throw new NotSupportedException(); // 其他转换暂不支持
}
// 从其他类型转换回来
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (targetType == typeof(ERemoteCtrlType))
{
// CheckBox会给出boolean,把bool转换为为ERemoteCtrlType。假定True的时候为Remote。
if (value is bool || value is bool?)
{
return (bool?)value == true
? ERemoteCtrlType.ERemoteCtrlType_Remote
: ERemoteCtrlType.ERemoteCtrlType_Local;
}
ERemoteCtrlType result;
// TextBox会给出string,把string解析为ERemoteCtrlType枚举
if (value is string && Enum.TryParse(value as string, ignoreCase: true, result: out result))
{
return result;
}
return default(ERemoteCtrlType);
}
throw new NotSupportedException(); // 其他转换暂不支持
}
}
public enum ERemoteCtrlType : byte //远程控制
{
ERemoteCtrlType_Local = 0x00,//本控
ERemoteCtrlType_Remote = 0x01,// 远控
}
/////////////////////////////////////////////////////////////////////
public ERemoteCtrlType m_iRemoteCtrl
{
get { return _m_iRemoteCtrl; }
set
{
_m_iRemoteCtrl = value;
NPC(pca_m_iRemoteCtrl);
}
}
ERemoteCtrlType _m_iRemoteCtrl;
static readonly PropertyChangedEventArgs pca_m_iRemoteCtrl = new PropertyChangedEventArgs("m_iRemoteCtrl");
public ERemoteCtrlType ConvertBack(bool value)
{
return value ? ERemoteCtrlType.ERemoteCtrlType_Remote : ERemoteCtrlType.ERemoteCtrlType_Local;
}