In meiner WPF-Anwendung habe ich eine ComboBox, die ich die Möglichkeit haben soll, die Auswahl von Elementen in der Dropdown-Liste programmgesteuert zu deaktivieren. Das Problem, das ich habe, ist, dass die Bindung ComboBoxItemIsEnabled nicht wie erwartet innerhalb des Setter funktioniert. Wenn Sie die Bindung entfernen und entweder True oder False verwenden, funktioniert das wie erwartet.Binding ComboBoxItem Wert innerhalb einer Setter-Eigenschaft in WPF MVVM
XAML
<ComboBox
ItemsSource="{Binding Path=ConfigItems.Result}"
DisplayMemberPath="Name"
IsEditable="True"
FontSize="14"
SelectedItem="{Binding SelectedItem, Mode=TwoWay}"
IsTextSearchEnabled="False"
Text="{Binding Path=ConfigItem,
UpdateSourceTrigger=LostFocus,
TargetNullValue={x:Static sys:String.Empty}}"
b:ComboBoxBehaviors.OnButtonPress="True">
<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem">
<Setter Property="IsEnabled" Value="{Binding ComboBoxItemIsEnabled}" />
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
C#
private string _comboBoxItemIsEnabled = "True";
public string ComboBoxItemIsEnabled
{
get
{
return this._comboBoxItemIsEnabled;
}
set
{
this.SetProperty(ref this._comboBoxItemIsEnabled, value);
}
}
public async Task<ConfigItem[]> LoadConfigItemsAsync(string partialName)
{
try
{
if (partialName.Length >= 5)
{
this.ComboBoxItemIsEnabled = "True";
return await this._Service.GetConfigItemsAsync(partialName);
}
this.ComboBoxItemIsEnabled = "False";
return new[] { new ConfigItem("Minimum of 5 characters required", null)};
}
catch (Exception)
{
this.ComboBoxItemIsEnabled = "False";
return new[] { new ConfigItem("No results found", null) };
}
}
ich auch die folgende Fehlermeldung von der Debug-Konsole, wenn die ComboBoxIsEnabled gesetzt wird.
System.Windows.Data Error: 40 : BindingExpression path error: 'ComboBoxItemIsEnabled' property not found on 'object' ''ConfigItem' (HashCode=56037929)'. BindingExpression:Path=ComboBoxItemIsEnabled; DataItem='ConfigItem' (HashCode=56037929); target element is 'ComboBoxItem' (Name=''); target property is 'IsEnabled' (type 'Boolean')
Ich bin mit der gleichen mvvm Methode eine IsEnabled Eigenschaft für eine Schaltfläche zum Ziel sonst wo, ohne ein Problem. Der einzige Unterschied, den ich in dem obigen Problem sehen kann, ist, dass ich die Eigenschaft stattdessen innerhalb eines Setter setze.
Vielen Dank für jede Weisheit, die Sie lösen können, um dieses Problem zu lösen.
Versuchen Sie mit Bool statt String – sTrenat
@sTrenat Danke für die Antwort, werde ich auf jeden Fall geben. Ich hatte gedacht, dass es die Ursache sein könnte, aber ich habe es als eine andere Kontrolle abgewiesen, die es nicht von mir verlangte. – Sabre
Wenn jemand anderes meine Frage abstimmen möchte, hinterlasse bitte einen Kommentar für ihren Grund. Es scheint schrecklich sinnlos zu sein, und ich sehe nicht wirklich, was mit meiner Frage falsch ist. – Sabre