0

リスト内の要素を選択するスライダーコントロールがあります。選択した要素のToString()を表示する必要があります。私が抱えている問題はvaluesIMultiValueConverter.Convert関数内のの値が常に正しい値を持っているが、常にvalues[0]values[1]あるということDependencyProperty.UnsetValueです。バインディングで何が間違っていますか?

これが私のXAMLです

<Window x:Class="VetWebConnectorWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:VetWebConnectorWPF"
        <!--Snip-->
        >
    <Grid>
    <!--Snip-->
        <GroupBox Grid.Row="1" Height="Auto" Header="Display configuration">
            <Grid>
                <!--Snip-->
                <Grid Grid.Row="1" Width="200">
                    <!--Snip-->
                    <Slider Name="sldrResoultion" Grid.Column="1" TickPlacement="BottomRight" Minimum="0" Maximum="{Binding ElementName=lstResoultions, Path=Count}" TickFrequency="1"
                                        IsSnapToTickEnabled="True"/>
                </Grid>
                <Label Name="lblResoultionDisplay" Grid.Row="2" HorizontalAlignment="Center">
                    <Label.Resources>
                        <local:ResoutionConverter x:Key="resoutionConverter" />
                    </Label.Resources>
                    <Label.Content>
                        <MultiBinding Converter="{StaticResource resoutionConverter}">
                            <Binding ElementName="sldrResoultion" Path="Value" />
                            <Binding ElementName="lstResoultions" />
                        </MultiBinding>
                    </Label.Content>
                </Label>
            </Grid>
        </GroupBox>
    </Grid>
</Window>

これがMainWindowのコードビハインドです

namespace VetWebConnectorWPF
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.lstResoultions = new List<object>();

            AddResoution(new Resoultion(1024, 768));
            AddResoution(new Resoultion(1366, 768));
            AddResoution(new Resoultion(1280, 960));
            AddResoution(new Resoultion(1440, 900));
            AddResoution(new Resoultion(1280, 1024));
            AddResoution(new Resoultion(1600, 900));
            AddResoution(new Resoultion(1400, 1050));
            AddResoution(new Resoultion(1440, 1080));
            AddResoution(new Resoultion(1600, 1200));
            AddResoution(new Resoultion(1920, 1080));
            AddResoution(new Resoultion(1920, 1200));
            AddResoution(new Resoultion(2048, 1152));
            AddResoution(new Resoultion(2560, 2048));
            AddResoution(new Resoultion(3200, 2048));

            this.lstResoultions.Add("Full Screen");

        }

        readonly List<object> lstResoultions;

        //(Snip)
    }
}

これがResoultion.csのコードです

namespace VetWebConnectorWPF
{
    public class Resoultion
    {
        public Resoultion(int width, int height)
        {
            this.Width = width;
            this.Height = height;
        }

        public int Width { get; private set; }
        public int Height { get; private set; }

        public override string ToString()
        {
            return string.Concat(this.Width, " x ", this.Height);
        }
    }

    class ResoutionConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (values == null || values.Length != 2)
                return null;

            double? idx = values[0] as double?;
            object[] resoultions = values[1] as object[];

            if (!idx.HasValue || resoultions == null)
                return null;

            return resoultions[System.Convert.ToInt32(idx.Value)];
        }

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

1 に答える 1

3

XAMLに名前の付いた要素が表示されませんlstResoultions

DependencyProperty.UnsetValueは、プロパティが存在することを示す代わりにWPFのプロパティシステムが使用するものですnullが、値がありません

于 2012-06-18T17:12:05.553 に答える