У меня возникли проблемы с привязкой некоторых атрибутов элементов.WPF DataBinding не обновляет свойство (только один раз при запуске)
У меня есть comboboxes и кнопки в itemcontrol. Комбобокс предназначен для поиска локалей по имени. Поэтому, когда создается combobox, свойство IsEditable истинно, чтобы позволить пользователю ввести имя, а затем нажмите левый элемент управления, чтобы найти эту строку в базе данных через WCF.
Затем, когда combobox ItemSource.Count как минимум 1, я блокирую combobox, установив IsEditable = false (используя DataBinding кнопки). То, когда кнопка должна изменить видимость от скрытого до видимого, потому что нажатие кнопки снова устанавливает значение IsEditable в true и позволяет пользователю вводить имя для поиска.
Для достижения этой цели, я переплетены выпадающий IsEditable с атрибутом видимости кнопки, и используется следующий конвертер, который работает:
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;
public class VisibilityToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (Visibility)value == Visibility.Visible ? false : true;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
Как я уже говорил, левая кнопка управления искать населенные пункты, на которые I'm с помощью KeyDown события:
private void ComboBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.LeftCtrl)
{
ComboBox cbx = sender as ComboBox;
LocationServiceClient locationService = new LocationServiceClient();
if (cbx != null)
{
cbx.ItemsSource = locationService.SeachLocalities(new SearchLocalitiesRequest { Search = cbx.Text, MaxItems = 20 }).Localities;
cbx.DisplayMemberPath = "LocalityName";
localityCombobox = cbx;
cbx.IsDropDownOpen = true;
}
}
}
Как Элементы Combobox изменился, wouldn't, что должно влиять на связывании видимости кнопок? Связывание использует этот конвертер, который работает тоже, но выполняется только один раз, когда я запускаю приложение. То проблема I'm имея, он просто не обновляет видимость кнопки, и оставляет его на Hidden:
public class ItemsSourceCountToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var b = (int)value > 0 ? Visibility.Visible : Visibility.Hidden;
return b;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
Это изображение контроля, это может помочь вам получить то, что я говорю:
Только в случае, это XAML я использовал:
<ComboBox Name ="cbxLocality" Width="200" DisplayMemberPath="{Binding LocalityName}" IsEditable="{Binding ElementName= btnRemoveLocality, Path=Visibility, Converter={StaticResource VisibilityToBooleanConverter}}" KeyDown="ComboBox_KeyDown">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding LocalityName}"/>
<TextBlock FontSize="10">
<Run Text="CP: "/>
<Run Text="{Binding ZipCode}"/>
<Run Text=" | "/>
<Run Text="{Binding Province.ProvinceName}"/>
</TextBlock>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<Button Name ="btnRemoveLocality" Content="x" Visibility="{Binding ElementName= cbxLocality, Path=Items.Count, Converter={StaticResource ItemsSourceCountToVisibilityConverter}}" Click="Button_Click_3"></Button>
ваши переменные «населенные пункты» выходят за рамки! –
@GarryVass, что вы имеете в виду? – Andres
У вас есть наблюдаемая коллекция, объявленная как локальная переменная. Механизм привязки не может видеть геттер для него, чтобы сделать правильную подписку на события наблюдаемого! –