自定义ComboBox并失去绑定

时间:2015-04-02 10:00:03

标签: c# mvvm

我试图编写自己的ComboBox,但遇到了问题。

public class TestComboBox : ComboBox
{
    public static readonly DependencyProperty SelectedCarProperty = DependencyProperty.Register("SelectedCar", typeof(string), typeof(TestComboBox), new FrameworkPropertyMetadata(null, OnSelectedCarPropertyChanged));

    public TestComboBox()
    {
        this.Cars = new ObservableCollection<string>() { "Select Car", "BMW", "Mersedes", "Audi" };

        this.ItemsSource = this.Cars;
        this.SelectedItem = this.Cars[0];
    }

    public string SelectedCar
    {
        get { return (string)GetValue(SelectedCarProperty); }
        set { this.SetValue(SelectedCarProperty, value); }
    }

    public IList<string> Cars { get; private set; }

    protected override void OnSelectionChanged(SelectionChangedEventArgs e)
    {
        base.OnSelectionChanged(e);
        this.SelectedCar = (string)SelectedItem;
    }

    private static void OnSelectedCarPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
    {
        var car = (string)e.NewValue;
        var editor = (TestComboBox)source;

        editor.SelectedItem = car;
    }
}

当我尝试安装默认值时,我失去了绑定。如果我评论这段代码,一切正常。

this.SelectedItem = this.Cars[0];

如何设置默认值而不会失去与VM的绑定

P.S TestApp

更新问题:

<propgrid:PropertyGrid Margin="0,0,11,7">
    <propgrid:PropertyGrid.Items>
        <propgrid:PropertyGridCategoryItem DisplayName="Main">
                <propgrid:PropertyGridPropertyItem Value="{Binding Car, Mode=TwoWay}"
                                               DisplayName="Car">
                <propgrid:PropertyGridPropertyItem.ValueTemplate>
                        <DataTemplate>
                            <wpfApplication1:TestComboBox SelectedCar="{Binding Value, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type propgrid:IPropertyDataAccessor}}}" />
                    </DataTemplate>
                </propgrid:PropertyGridPropertyItem.ValueTemplate>
            </propgrid:PropertyGridPropertyItem>
        </propgrid:PropertyGridCategoryItem>
    </propgrid:PropertyGrid.Items>
</propgrid:PropertyGrid>

1 个答案:

答案 0 :(得分:0)

尝试给Mode = TwoWay进行绑定。

更新答案:

参考您的代码 - 设置模式TwoWay at

Value="{Binding Car}" 

&#34;车载&#34;必然会有&#34;价值&#34;和&#34;价值&#34;被绑定到#34; SelectedCar&#34;