【问题标题】:Binding to Property of a ComboBox's SelectedItem绑定到 ComboBox 的 SelectedItem 的属性
【发布时间】:2013-02-28 16:47:02
【问题描述】:

我很难找到正确的语法来绑定到 ComboBox 的 SelectedItem 的属性。这是我尝试用于绑定的 XAML。您在哪里看到 SelectedItem.Mode 是我遇到困难的想法。请注意,CurrentMode 在 ViewModel 中,并且与 SelectedItem.Mode 具有相同的类型

<ComboBox SelectedItem.Mode="{Binding Path=CurrentMode, Mode=TwoWays}">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <Image Source="{Binding ImageSource}"/>
                </DataTemplate>
            </ComboBox.ItemTemplate>
            <local:ModeItem Mode="Free" ImageSource="pencil.png"/>
            <local:ModeItem Mode="Arrow" ImageSource="arrow.png"/>

        </ComboBox>

一个 local:ModeItem 看起来像这样

    public class ModeItem : DependencyObject, INotifyPropertyChanged
{
    public static readonly DependencyProperty ModeProperty = DependencyProperty.Register("Mode", typeof(AnnotationMode), typeof(ModeItem));
    public AnnotationMode Mode
    {
        get { return (AnnotationMode)GetValue(ModeProperty); }
        set { SetValue(ModeProperty, value); }
    }
    public string ImageSource { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;
}

我正在使用 MVVM 并尝试将 ViewModel 的 AnnotationMode (CurrentMode) 绑定到 ComboBox 的 SelectedItem 的 AnnotationMode (Mode)

【问题讨论】:

    标签: wpf xaml binding combobox selecteditem


    【解决方案1】:

    只要这样做 SelectedItem="{绑定 CurrentMode}

    您不必做所有这些额外的事情。注意您确实需要使组合框的数据上下文指向您的视图模型。

    编辑:- 你应该可以做到这一点

    SelectedValue="{Binding CurrentMode, Mode=TwoWay}" 
    SelectedValuePath="Mode" 
    

    【讨论】:

    • 但这不会只是尝试将 SelectedItem(本地:ModeItem 类型)绑定到 CurrentMode(AnnotationMode 类型)吗?那会奏效吗?谢谢,但不用担心数据上下文已加载。
    • 您是否可以控制此代码,因为如果是这样,为什么不创建您尝试使用绑定的类型的属性。为什么要使 xaml 中的子类化问题复杂化?请注意,您对我的答案会发生什么是正确的。
    猜你喜欢
    • 2021-02-15
    • 1970-01-01
    • 2014-12-08
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    相关资源
    最近更新 更多