- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在与 Binding 一起使用的 Converter 中,有些东西我无法理解。 :-(
我用 Mvvm-Light 创建了一个简单的例子......
这里是完整的解决方案:https://testbindingwithconverter.codeplex.com/SourceControl/latest
这里是一张图片:http://i.stack.imgur.com/wUf89.png
和摘要源代码下方:
CarsView
<Rectangle Grid.Row="0"
Opacity="{Binding SelectedCar, Converter={StaticResource IntToOpacityConverter}}"
Fill="#FFD1E22A" />
<ListBox Grid.Row="1"
ItemsSource="{Binding Cars}"
SelectedItem="{Binding SelectedCar, Mode=TwoWay}" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Company}" />
<TextBlock Text="{Binding Name}" />
<TextBlock Text="{Binding Year}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
CarsViewModel
public class CarsViewModel : ViewModelBase
{
private ObservableCollection<Car> cars;
private Car selectedCar;
public CarsViewModel()
{
if (IsInDesignMode)
{
}
else
{
// INIT
this.cars = new ObservableCollection<Car>();
this.selectedCar = null;
// FAKE DATA
for (int i = 1; i <= 10; i++)
{
Car newCar = new Car { Id = i, Company = "Company_" + i, Name = "Name_" + i, Year = "200" + i };
Cars.Add(newCar);
}
}
}
public ObservableCollection<Car> Cars
{
get
{
return cars;
}
set
{
if (cars != value)
{
cars = value;
RaisePropertyChanged(() => Cars);
}
}
}
public Car SelectedCar
{
get
{
return selectedCar;
}
set
{
if (value != selectedCar)
{
selectedCar = value;
RaisePropertyChanged(() => SelectedCar);
}
}
}
}
转换器
public class IntToOpacityConverter : System.Windows.Data.IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double opacity = 1;
Car c = value as Car;
if (c != null)
{
if (c.Id == 5)
{
opacity = 0.3;
}
}
System.Diagnostics.Debug.WriteLine("[IntToOpacityConverter] \t" + "Rectangle Opacity: " + opacity);
return opacity;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
// One-Way conversion!
return null;
}
在 CarsView 中,当我点击 ListBox 的第 5 项时,Rectangle 的属性 Opacity 设置为值 0.3,否则设置为值 1。
现在,当我返回到 HomeView 然后再次返回到 CarsView 时,如果我在项目之间点击转换器被调用 2 次 !再一次,如果我返回到 HomeView 并返回到 CarsView,转换器被调用 3 次!等等……
为什么?
最佳答案
嘿文森佐佩特罗尼奥,
我不会在每次导航时创建一个新的 CarsViewModel(),因为它不会将您的颜色保存在 Rectangle 上,相反,您希望在导航离开时取消绑定(bind) DataContent。
在 CarsView.xaml/CarsView.xaml.cs 上创建一个卸载事件:
<phone:PhoneApplicationPage Unloaded="PhoneApplicationPage_Unloaded">
private void PhoneApplicationPage_Unloaded(object sender, RoutedEventArgs e)
{
this.DataContext = null;
}
然后您需要检查 Car Set 函数是否为空值,这样它就不会将您的选择更改为空值。
public Car SelectedCar
{
get
{
System.Diagnostics.Debug.WriteLine("[CARSVIEWMMODEL] \t" + "GET SelectedCar");
return selectedCar;
}
set
{
if (value != selectedCar && value != null)
{
selectedCar = value;
System.Diagnostics.Debug.WriteLine("[CARSVIEWMMODEL] \t" + "SET SelectedCar");
RaisePropertyChanged(() => SelectedCar);
}
}
}
如果您应用更改,您会看到它会按照您想要的方式运行,而且当您导航回“汽车”页面时它会保存该矩形的颜色。
关于c# - 导航期间多次调用 ValueConverter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25490577/
有没有一种方法可以在不在资源中定义的情况下使用 ValueConverter?因为语法非常冗长。 最佳答案 您可以使用 MarkupExtension 来最小化所需的 xaml 代码量。例如: pub
使用 Silverlight 4,我试图在我的 UserControl 的资源部分中初始化一个转换器,并引用我的控件中的一个对象。当我尝试运行应用程序时出现此异常,注意实际 XAML 文件中的第 16
我有一个绑定(bind)到集合的组合框。集合中的每个项目都有一个可能包含也可能不包含项目的子集合。我有第二个组合框,子集合绑定(bind)到该组合框。如果子集合有项目,我只想显示 (=Visibili
在与 Binding 一起使用的 Converter 中,有些东西我无法理解。 :-( 我用 Mvvm-Light 创建了一个简单的例子...... 这里是完整的解决方案:https://testbi
应该实现两个函数,我想知道我需要对输入进行哪种类型的验证以及如何管理错误。 Public Function Convert(ByVal value As Object, ByVal targetTyp
是否可以将 ValueConverter 与内联一起使用?我需要将 ListBox 中每一行的某些部分加粗。 它编译但我得到:不能在“Inl
我正在使用 MVVM,以防万一。 我的 MainWindowViewModel 有两个 DependencyProperties,TheList 和 TheSelectedItem。 TheList
我正在尝试根据单元格的值所属的 ObservableCollection 中的最小值或最大值来更改数据网格单元格的颜色。 现在我有以下数据网格和样式模板:
为什么我的 ValueConverter 没有被触发? 当我的 View 模型的构造函数被执行时,我的值转换器被触发。但是,当我为 Cells 属性分配新值时,它不会被触发。 我希望这一行能够触发我的
关于Nerd Plus Art今天的博客,有一篇关于为箭头创建WPF资源的帖子,作者经常使用。我有一个带有后退和前进按钮的辅助项目,所以我认为向左和向右箭头在这些按钮上效果很好。 我将 LeftArr
我想采用以下 ValueConverter 并使其可重用于许多 View 。 export class ProductFilterValueConverter { toView(array,
我有一个 ValueConverter 用于在 StoryBoard 动画中绑定(bind)“To”值,类似于答案 - WPF animation: binding to the “To” attri
我正在尝试将 @string/something 传递给一个值转换器,以便我可以使用它来格式化输出,假设我有一个 DateTime 值,我想将类似 "Signup Date: {0}" 的内容传递给
我一直在 WPF 中使用 Singleton 值转换器。但最近我和一位同事发生了争执,他说使用 valueconverters 的单例实例是不好的,因为它们只会被应用程序域卸载处理。他建议单例转换器可
我有值转换器,它可以在控件的文本是否以 http 开头时转换控件的可见性方面。下面是代码。 public class HTTPVisibilityConverter : IValueConverter
在我的 Grails 2.3.7 应用程序中,我有以下命令对象 class UpdateThresholdsCommand { Double threshold_1 Double th
假设您有一个用户选择列表。根据用户所做的选择,其他选择可能不再可用。 我有一个 ValueConverter 可以处理这个问题。如果它知道进行了哪些选择,它将返回一个值,指示正在转换的项目是否仍然可选
我有一个 Window 类,其中我有几个 TextBlock 元素,它们应该通过 的值接收 Background 颜色绑定(bind) 属性。第一个“Converter binding”工作正常并且可
有没有办法让 WPF 自动将 Converter 应用于特定类型的所有绑定(bind)? 我看过 this question , 但它涵盖了不同的情况(本地化),因此没有令人满意的答案。 我的问题:我
我正在尝试编写一个值转换器,用于将 WPF ToggleButton 的 Boolean IsChecked 属性绑定(bind)到我的模型中的非 bool 值(恰好是 double 值)。我编写的转
我是一名优秀的程序员,十分优秀!