内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
与枚举不同,我希望生成一个自定义类型的运行时枚举集,并将其表示为一组单选按钮。我已经获得了一个视图,该视图与运行时枚举集一起使用ListView
,绑定到ItemsSource
和SelectedItem
所以我的ViewModel
是正确连接的。现在我正试图从ListView
转到ItemsControl
带有单选按钮。
据我所知:
<Window.Resources> <vm:InstanceToBooleanConverter x:Key="InstanceToBooleanConverter" /> </Window.Resources> <!-- ... --> <ItemsControl ItemsSource="{Binding ItemSelections}"> <ItemsControl.ItemTemplate> <DataTemplate DataType="{x:Type vm:ISomeType}"> <RadioButton Content="{Binding Name}" IsChecked="{Binding Path=SelectedItem, Converter={StaticResource InstanceToBooleanConverter}, ConverterParameter={Binding}}" Grid.Column="0" /> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl>
InstanceToBooleanConverter
具有与EnumToBooleanConverter
从另一个问题。这似乎是对的,因为它似乎只是调用Equals
方法:
public class InstanceToBooleanConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return value.Equals(parameter); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return value.Equals(true) ? parameter : Binding.DoNothing; } }
我现在遇到的问题是,我不知道如何将运行时值作为ConverterParameter
。当我尝试(使用上面的代码)时,我得到了以下错误:
A 'Binding' cannot be set on the 'ConverterParameter' property of type 'Binding'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.
是否有一种方法可以绑定到项实例,并将其传递给IValueConverter
?
下面是一个未经测试但通用的版本:
<ItemsControl ItemsSource="{Binding Converter={StaticResource theConverter} ConverterParameter="SomeEnumProperty"}"> <ItemsControl.ItemTemplate> <DataTemplate> <RadioButton IsChecked="{Binding IsChecked}"> <TextBlock Text="{Binding Name}" /> </RadioButton> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl>
转换器:
public class ToEnumModelsConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { var viewmodel = value; var prop = viewmodel.GetType().GetProperty(parameter as string); List<EnumModel> enumModels = new List<EnumModel>(); foreach(var enumValue in Enum.GetValues(prop.PropertyType)) { var enumModel = new EnumModel(enumValue, viewmodel, prop); enumModels.Add(enumModel); } return enumModels; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }
EnumModel:
public class EnumModel : INPC { object enumValue; INotifyPropertyChanged viewmodel; PropertyInfo property; public EnumModel(object enumValue, object viewmodel, PropertyInfo property) { this.enumValue = enumValue; this.viewmodel = viewmodel as INotifyPropertyChanged; this.property = property; this.viewmodel.PropertyChanged += new PropertyChangedEventHandler(viewmodel_PropertyChanged); } void viewmodel_PropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == property.Name) { OnPropertyChanged("IsChecked"); } } public bool IsChecked { get { return property.GetValue(viewmodel, null).Equals(enumValue); } set { if (value) { property.SetValue(viewmodel, enumValue, null); } } } }
目前呼叫中心只有API文档,需要用户自己开发。如果用户需要saas系统的呼叫中心可以使用智能外呼机器人:https://cloud.tencent.com/product/ccsr
你有没有调整观众端表现,即通过对 LivePushConfig 中的homeOrientation设置项进行配置,它控制的是观众端看到的视频宽高比是16:9还是6:19,调整后的结果可以用播放器查看以确认是否符合预期。
控制台使用的是新的接口,批量创建子网,https://cloud.tencent.com/document/product/215/31960,可以指定路由表。terraform开发的时候是基于api2.0开发的,还没有这个接口,因此暂时无法使用