0
我有一個滑塊控件,將選擇一個列表中的元素。我需要顯示所選元素的ToString()。我遇到的問題是values
的值在我的IMultiValueConverter.Convert
函數中始終有一個正確的值values[0]
,但values[1]
總是DependencyProperty.UnsetValue
。我在綁定中做錯了什麼?IMultiValueConverter總是通過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>
這裏是我的主窗口
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();
}
}
}
lstResoultions在代碼隱藏文件'只讀目錄
@ScottChamberlain那不是東西UI可以在運行時查找。 'ElementName'綁定通過可視樹來查找具有特定名稱的元素,並且在您的情況下,可視樹中沒有名爲'lstResolutions'的元素。 – Rachel
我需要做什麼才能允許綁定lstResoultions? –