我在綁定某些項目屬性時遇到了一些麻煩。WPF DataBinding不更新屬性(僅在啓動時只有一次)
我有一個組合框和項目控件中的按鈕。該組合框用於按名稱搜索地區。這就是爲什麼創建組合框時,屬性IsEditable爲true,以便讓用戶輸入名稱,然後按左控以通過WCF在數據庫中搜索該字符串。
然後,當combobox的ItemSource.Count至少爲1時,我通過設置IsEditable = false(使用按鈕的DataBinding)來阻止組合框。那就是當按鈕必須將可見性從隱藏變爲可見時,因爲再次按下IsEditable按鈕設置爲真,並使用戶輸入名稱進行搜索。
要做到這一點,我已經綁定的組合框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的項目發生變化,也不會轉回去具有影響按鈕知名度的結合? 綁定使用這個轉換器,它也可以工作,但只運行一次,當我運行應用程序。那是I'm有,它只是不更新按鈕的知名度問題,並讓它隱:
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
你有一個可觀察的集合被聲明爲局部變量。綁定引擎無法看到它的getter,以便正確訂閱observable的事件! –