通过SelectedValue属性

时间:2017-05-14 09:42:53

标签: c# wpf data-binding

我有一个名为Currencies的StaticResource组合框,Currencies是某类的ObservableCollection

在这个类中我有一个名为CurrencyID的参数。 我有另一个名为Item的类,它有一个名为CurrencyID的参数。

我想从组合框中设置Item.CurrencyID,因为我使用ValueSelected和ValueSelectedPath以及从comboboxitem到CurrencyID的转换器。

它有效。

接下来我想从Item类的CurrencyID中选择组合框。 但它总是显示未经选择的组合框。

以下是相关代码: XAML:

<Window.Resources>
    <converters:sp_GetCurrencies_ResultToID x:Key="sp_GetCurrencies_ResultToIDConverter"/>
    <CollectionViewSource x:Key ="Currencies" Source="{Binding Currencies}"/>
</Window.Resources>


<ComboBox x:Name="cmbCurrencies" ItemsSource="{Binding Source={StaticResource Currencies} }" SelectedValuePath="{Binding CurrencyID, Mode=TwoWay}"  SelectedValue="{Binding Item.CurrencyID, Converter={StaticResource sp_GetCurrencies_ResultToIDConverter}}" DisplayMemberPath="CurrencyName" Width="150" Height="30" VerticalContentAlignment="Center" FlowDirection="RightToLeft" VerticalAlignment="Top" HorizontalAlignment="Right" Margin="5"/>

转换器:

public class sp_GetCurrencies_ResultToID : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value != null)
            using (PricingManagerEntities db = new PricingManagerEntities())
                return db.sp_GetCurrencies((long)value,null).FirstOrDefault();                
        else
            return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value != null)
        {
            return (value as sp_GetCurrencies_Result).CurrencyID;
        }
        else return null;
    }
}

在代码中我设置了Item.CurrencyID = 1。

我也遇到了这个错误,我认为它与之相关: BindingExpression路径错误:&#39; CurrencyID&#39;在&#39; object&#39;上找不到的属性&#39;&#39; ItemsViewModel&#39; (的HashCode = 45202739)&#39 ;. BindingExpression:路径= CurrencyID;的DataItem =&#39; ItemsViewModel&#39; (的HashCode = 45202739);目标元素是&#39; ComboBox&#39; (名称=&#39; cmbCurrencies&#39); target属性是&#39; SelectedValuePath&#39; (键入&#39; String&#39;) 该程序&#39; [12436] PricingManager.vshost.exe&#39;已退出代码0(0x0)。

感谢您的帮助。

0 个答案:

没有答案