将布尔值绑定到IsEnabled
本文关键字:IsEnabled 绑定 布尔值 | 更新日期: 2023-09-27 18:12:41
编辑:
我像ASh建议的那样添加了INotifyPropertyChanged,但它仍然不能100%工作,但我会在另一个问题中问这个问题。
我意识到我弄错了HasChanged,并将其更改为!=
更新的原始帖子
我有一门课叫文档
public class Document : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
private string oldId;
public string OldId
{
get { return oldId; }
set { id = value; }
}
private string id;
public string Id
{
get { return id; }
set {
id = value;
NotifyPropertyChanged("HasChanged");
}
}
private string path;
public string Path
{
get { return path; }
set { path = value; }
}
public bool HasChanged
{
get { return id != oldId; }
}
public Document(string id, string path)
{
this.id = id;
this.oldId = id;
this.path = path;
}
}
我在WPF代码后面得到了文档列表,项是我表单中的ItemsControl。
AddItem("a", "b");
AddItem("b", "b");
AddItem("c", "b");
AddItem("d", "b");
private void AddItem(string key, string value)
{
items.Items.Add(new Document(key, value));
}
我的WPF如下所示:
<ItemsControl x:Name="items" AlternationCount="100">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="8*"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<TextBox
Text="{Binding Id}"
PreviewKeyDown="TextBox_PreviewKeyDown"></TextBox>
<Button
Grid.Column="1"
IsEnabled="{Binding HasChanged}"
Content="Ok"
Click="ButtonOk_Click"></Button>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
正如您所猜测的,当tb中的文本与原始文本发生更改时,我希望启用Button。
问题是IsEnabled上的绑定不起作用。
需要做些什么才能让它发挥作用?
或者,有没有更好的方法可以在更改后启用按钮,请记住,我不能从后面的代码直接访问按钮,因为ItemControl正在根据我的模板动态生成按钮。
我不想使用ViewModel,因为这个应用程序很小,不会从中获利。
如果在Document
中实现INotifyPropertyChanged,并在HasChanged
更改时引发PropertyChanged
事件(在Id
setter中(,则IsEnabled
的绑定应更新