1

我将一个名为 ScaleFactor 的 ObservableCollection 绑定到一个 ComboBox。ObservableCollection 的值只是 1、2、4 和 8。我想使用 IValueConverter 将这些值更改为 x1、x2、x4 和 x8。

我的 MainWindow.xaml

<Window x:Class="TimeLineCanvas.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:timeline="clr-namespace:TimeLineCanvas.UserControls"
        xmlns:helper="clr-namespace:TimeLineCanvas.Helpers"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.Resources>
            <helper:ZoomConverter x:Key="ZoomConverter" />
        </Grid.Resources>

        <StackPanel>    
            <ComboBox ItemsSource="{Binding SSS}" HorizontalAlignment="Left" >
                <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding, Converter={StaticResource ZoomConverter}}" />
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>
        </StackPanel>
    </Grid>
</Window>

以及背后的代码

using System;
using System.Windows;
using System.ComponentModel;
using System.Collections.ObjectModel;

namespace TimeLineCanvas
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        #region Constructors

        public MainWindow()
        {
            InitializeComponent();

            SSS = new ObservableCollection<int>();
            SSS.Add(1);
            SSS.Add(2);
            this.DataContext = this;
        }

        #endregion    

        public ObservableCollection<int> SSS { get; set; }    
    }
}

和转换器

using System;
using System.Windows.Data;

namespace TimeLineCanvas.Helpers
{
    public class ZoomConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return "x" + value.ToString();
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

我不知道为什么会这样,我没有使用 MarkupExtensions 所以我认为这个链接没有帮助。任何人都可以发光吗?

4

1 回答 1

4

之后不要使用逗号Binding。这样你就可以在Binding对象上调用空构造函数。

{Binding, Converter={StaticResource ZoomConverter}}

应该

{Binding Converter={StaticResource ZoomConverter}}
于 2013-11-05T14:52:02.633 回答