Ich habe ein Problem beim Versuch, 2 oder mehr Comboboxen SelectedValue an eine Eigenschaft zu binden, die null ist. Nur 1 der an diese Eigenschaft gebundenen Comboboxen zeigt den tatsächlichen Wert an.WPF ComboBox SelectedValue Bindung mit Nullwert zeigt leer
Unten ist mein Xaml, wo ich DataTemplate verwenden, um eine Combobox für die Präsentation des ViewModel auszuwählen.
XAML:
<Window x:Class="Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Test"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<DataTemplate DataType="{x:Type local:PropertyValueViewModel}">
<ComboBox SelectedValue="{Binding Value}" ItemsSource="{Binding SelectableValues}" DisplayMemberPath="Description" SelectedValuePath="Value"/>
</DataTemplate>
</Window.Resources>
<StackPanel>
<Label Content="These uses template:"></Label>
<ContentPresenter Content="{Binding ValueSelector}"></ContentPresenter>
<ContentPresenter Content="{Binding ValueSelector}"></ContentPresenter>
<ContentPresenter Content="{Binding ValueSelector}"></ContentPresenter>
</StackPanel>
Und den Code hinter:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ValueSelector = new PropertyValueViewModel()
{
SelectableValues = new List<SelectableValue>()
{
new SelectableValue("NULL", null),
new SelectableValue("1", 1)
},
Value = null
};
DataContext = this;
}
public static readonly DependencyProperty ValueSelectorProperty = DependencyProperty.Register(
"ValueSelector", typeof(PropertyValueViewModel), typeof(MainWindow), new PropertyMetadata(default(PropertyValueViewModel)));
public PropertyValueViewModel ValueSelector
{
get { return (PropertyValueViewModel)GetValue(ValueSelectorProperty); }
set { SetValue(ValueSelectorProperty, value); }
}
}
/// <summary>
/// My viewModel
/// </summary>
public class PropertyValueViewModel
{
public object Value { get; set; }
public object SelectableValues { get; set; }
}
/// <summary>
/// The items in the combobox
/// </summary>
public class SelectableValue
{
public SelectableValue(string header, object value)
{
Value = value;
Description = header;
}
public object Value { get; set; }
public string Description { get; set; }
}
Jetzt frage ich mich, warum nur 1 von ihnen den NULL-Wert beim Start zeigen kann? Ich kann den Wert in jedem von ihnen ändern, und sie werden alle mit dem Wert in der Eigenschaft synchronisiert - wenn ich 1 und dann zurück zu NULL wählen, werden sie alle NULL zeigen. Es scheint, als ob nur der Anfangswert nicht korrekt angezeigt wird.
Wenn ich vermeiden, DataTemplate zu verwenden, funktioniert die Bindung auch. Weiß jemand, warum das DAtaTemplate sich so verhält?
Danke. Ich werde dies als meine Lösung bezeichnen, da es ein paar Wege gibt, das Problem zu lösen, und eine nette Erklärung für das Problem. – Patrick