Tag: ivalueconverter

WPF RadioButton InverseBooleanConverter不工作

我有两个RadioButtons,我绑定到ViewModel中的布尔属性。 不幸的是我在转换器中收到错误,因为’targetType’参数为null。 现在我并不期望targetType参数通过为null(我期待True或False)。 但是我注意到RadioButton的IsChecked属性是一个可以为空的bool,所以这种解释。 我可以更正XAML中的某些内容,还是应该更改解决方案的现有转换器? 这是我的XAML: 这是我使用解决方案范围的InverseBooleanConverter的现有转换器: public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if ((targetType != typeof(bool)) && (targetType != typeof(object))) { throw new InvalidOperationException(“The target must be a boolean”); } return !(((value != null) && ((IConvertible)value).ToBoolean(provider))); }

如何在XAML中将静态值传递给IValueConverter

我想在我的WP7应用程序中使用从Web服务获取的静态文本。 每个文本都有一个名称(indetifier)和一个Content属性。 例如,文本可能如下所示: Name = “M43”; Content = “This is the text to be shown”; 然后,我想将文本的名称(即标识符)传递给IValueConverter ,然后IValueConverter将查找Name并返回文本。 我认为转换器看起来像这样: public class StaticTextConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value != null) { return App.StaticTexts.Items.SingleOrDefault(t => t.Name.Equals(value)).Content; } return null; } } 然后在XAML中: … 但是,这似乎不起作用,我不确定我是否正确地将值传递给转换器。 有没有人有一些建议?

具有绑定依赖属性的IValueConverter

我需要在运行时根据要绑定的对象中标识的单位系统确定某些绑定TextBlocks的StringFormat 。 我有一个具有依赖属性的转换器,我想绑定到。 Bound值用于确定转换过程。 public class UnitConverter : DependencyObject, IValueConverter { public static readonly DependencyProperty IsMetricProperty = DependencyProperty.Register(“IsMetric”, typeof(bool), typeof(UnitConverter), new PropertyMetadata(true, ValueChanged)); private static void ValueChanged(DependencyObject source, DependencyPropertyChangedEventArgs e) { ((UnitConverter)source).IsMetric = (bool)e.NewValue; } public bool IsMetric { get { return (bool)this.GetValue(IsMetricProperty); } set { this.SetValue(IsMetricProperty, value); } } object IValueConverter.Convert(object value, Type targetType, […]

MarkupExtension.ProvideValue – 是否实际使用了IServiceProvider?

我正在阅读我的一些旧代码,并遇到了一个混合的IValueConverter / MarkupExtension类。 它让我想知道ProvideValue方法中的IServiceProvider是否真的有用,以及它如何有用? 我看到IServiceProvider只有一个方法: GetService ,必须转换为正确的服务类型。 我还查看了MarkupExtension.ProvideValue MSDN页面,它列出了不同类型的服务。 我想,我只是想知道这些服务是否有用,或者我应该保留我的方法呢? 现行方法: public Object ProvideValue(IServiceProvider serviceProvider) { return new MyConverter(); } 基本上,我应该做以下事情: public Object ProvideValue(IServiceProvider serviceProvider) { var provider = serviceProvider as SomeType; if (provider == null) return new MyConverter(); //Do something with the provider here? }

当DataGrid发生更改时,为什么我的ViewModel中的属性没有更新?

我正在尝试创建一个UserControl,它允许我在网格中编辑Dictionary类型的Dictionary (只编辑条目到目前为止,不添加或删除)。 每当我将DataGrid绑定到Dictionary时,它将网格显示为只读,因此我决定创建一个值转换器,将其转换为ObservableCollection ,其中DictionaryEntry只是一个具有两个属性Key和Value 。 这适用于在网格中显示字典,但现在当我对网格进行更改时,我的字典没有被更新。 我不确定为什么。 我认为这是我设置绑定的方式或我的值转换器的问题。 如果有人能够发光,那就太棒了。 下面是我能做的最小的演示,它展示了我正在做的事情。 问题是当我更改网格中的值时,我的MainViewModel上的MyDictionary不会更新。 为什么? MainViewModel.cs public class MainViewModel : INotifyPropertyChanged { public MainViewModel() { _myDictionary = new Dictionary() { {“Key1”, “Value1”}, {“Key2”, “Value2”}, {“Key3”, “Value3”} }; } private Dictionary _myDictionary; public Dictionary MyDictionary { get { return _myDictionary; } set { if (_myDictionary == value) return; _myDictionary […]

尝试在WPF中更改绑定的RadioButton时的奇怪行为

我已经在我的Child窗口中将两个单选按钮绑定到我的ViewModel的Enum ,它在主窗口中构建。 绑定按预期工作,但我注意到一个非常奇怪的行为,我无法解决。 我在这里提供了所有代码,因此您可以轻松地为自己重建问题。 以下是查看这种奇怪行为的步骤: 单击MainWindow中的按钮 ChildWindow打开,RadioButton设置为User 选择自动,然后再次选择用户 关闭ChildWindow并重新打开它! 尝试将RadioButton更改为自动。 它不会改变! public partial class MainWindow { public MainWindow() { InitializeComponent(); var viewModel = new ViewModel(); DataContext = viewModel; } private void DisplayChildWindow(object sender, RoutedEventArgs e) { var win = new ChildWindow {DataContext = (ViewModel) DataContext}; win.ShowDialog(); } } public class ViewModel : INotifyPropertyChanged { public […]

Silverlight中的动态图像源绑定

我想根据ChildWindow DataContext设置图像的源。 这是XAML文件: … … 如果我覆盖ChildWindow的Show方法并设置图像的源,它工作正常: public new void Show() { DialogIcon.Source = new BitmapImage(new Uri(@”/Images/DialogWindow/Confirm.png”, UriKind.Relative)); base.Show(); } 但它看起来很丑陋而且不是“silverlight方式”,所以我决定改变: 你看我注册了一个DialogIconConverter来绑定DataContext的源代码。 public class DialogIconConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { //currently it’s an hard-coded path return new BitmapImage(new Uri(@”/Images/DialogWindow/Confirm.png”, UriKind.Relative)); } … } 但它现在不能正常工作,我在这个控件中有几个其他转换器工作正常。 只有这一个不起作用。 你能帮忙找出问题所在吗? 编辑: […]

将值传递给IValueConverter

我有一个ListView ,它有一个包含两列和多行的Grid 。 每行在每列中都有一个TextBlock ,每个Text属性绑定到ListView的ItemSource的值。 我需要根据第一个TextBlock的值对第二个TextBlock中的文本进行一些转换。 如何将第一个文本框的值输入转换器? 这是我到目前为止: XAML: ValueStringConverter代码: public class ValueStringConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { string name = (string)value; name = name.Replace(“$$”, ” “); name = name.Replace(“*”, “, “); name = name.Replace(“##”, “, “); return value; } public object ConvertBack(object value, Type targetType, […]

在INotifyPropertyChanged上刷新值转换器

我知道这里有一些类似的话题,但我无法从他们那里得到任何答案。 我必须在我的Windows Phone 7应用程序中将网格背景更新为图像或颜色。 我使用我的值转换器,它工作正常,但我必须重新加载集合,以便更新颜色或图像。 转换器接收对象然后从中获取颜色和图像,这里是转换器 public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { People myC = value as People; string myImage = myC.Image; object result = myC.TileColor; if (myImage != null) { BitmapImage bi = new BitmapImage(); bi.CreateOptions = BitmapCreateOptions.BackgroundCreation; ImageBrush imageBrush = new ImageBrush(); using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) { […]

WPF IValueConverter – 将多个值转换为单个值

我正在努力维护别人的代码,因为那个人是WPF专家。 另一方面,我不是。 🙂 该代码使用IValueConverter将状态枚举转换为布尔值,该布尔值控制是否在屏幕上显示UserControl。 我发现了一个缺点,即在这种情况下单个枚举是不够的,实际上还需要考虑另一个布尔值。 是否有另一个可以使用的对象,它会将2个项目作为参数进行转换? (“converter”参数已被使用。) 一个简单的例子如下。 现有代码的逻辑说…… If it’s sunny, go to work. If it’s raining, don’t go to work. 我需要考虑另一件事情,如下所示。 If it’s sunny and you’re wearing pants, go to work. If it’s sunny and you’re not wearing pants, don’t go to work. If it’s raining and you’re wearing pants, don’t go to […]