我试图编写自己的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>
答案 0 :(得分:0)
尝试给Mode = TwoWay进行绑定。
更新答案:
参考您的代码 - 设置模式TwoWay at
Value="{Binding Car}"
太
&#34;车载&#34;必然会有&#34;价值&#34;和&#34;价值&#34;被绑定到#34; SelectedCar&#34;