这是我第一次使用这种性质的WPF绑定,所以我确定我做的很傻。
我有以下内容:
Window
定义DataContext="{StaticResource MainWindowViewModel}"
readonly List<string> _sqlServerChoices = new List<string>{"DEV", "SPDEV", "SPSQL", "SQL2008"};
public List<string> SqlServerChoices{get { return _sqlServerChoices; }}
ComboBox
UploaderSettings
,包含数据库设置,共享点设置等。SqlServerHasBeenEntered
的属性,它是一个返回绑定似乎无声地失败。我看到组合框项目,但是当我选择它们时,没有任何变化,并且看起来没有调用onpropertychanged事件处理程序。
ComboBox XAML定义:
<ComboBox Grid.Row="0" Grid.Column="1" VerticalAlignment="Center"
ItemsSource="{Binding SqlServerChoices}"
SelectedValue="{Binding Settings.DatabaseSettings.SqlServer,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged }">
SQL Server字段是否包含文本的布尔值:
public bool SqlServerHasBeenEntered
{
get
{
return !String.IsNullOrEmpty(Settings.DatabaseSettings.SqlServer);
}
}
属性更改处理程序:
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
答案 0 :(得分:0)
首先,使用ComboBox.SelectedItem
属性绑定到您的Settings.DatabaseSettings.SqlServer
属性(而不是SelectedValue
)。然后添加IsEnabled
属性绑定:
<ComboBox IsEnabled="{Binding SqlServerHasBeenEntered}" ... />
最后,您需要在需要更新时随时随地拨打OnPropertyChanged("SqlServerHasBeenEntered");
。 (此可以从另一个相关的属性设置器中调用,该设置器在某个时间更新,或者只是从任何方法更新。