我在AvaloniaTabControl
中显示了一组选项卡,每个选项卡由一个TabModel
对象表示。
TabModel.cs
:
public class TabModel
{
public string Name { get; set; }
public string Content { get; set; }
}
我希望每个选项卡都有一个TextBlock
作为它的标题(类似于文档中的例子)和一个自定义控件作为主体。加载TabControl
时,标题和正文显示正常。但是,当我修改Name
或Content
字段时,控件不会更新。当控件更改Content
时(通过TwoWay
绑定),更改将反映在字段中,代码所做的任何更改将被遗忘。
Xaml:
<TabControl Items="{Binding Tabs}">
<TabControl.ItemTemplate>
<TreeDataTemplate DataType="models:TabModel">
<TextBlock Text="{Binding Name}" />
</TreeDataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<TreeDataTemplate DataType="models:TabModel">
<controls:BoundEditor
BoundText="{Binding Content, Mode=TwoWay}" Name="BoundEditor" />
</TreeDataTemplate>
</TabControl.ContentTemplate>
</TabControl>
目前,您的模型是一个普通的POCO。P躺OC>O bject .
你需要的是一个ViewModel…
public class TabModel : ReactiveObject
{
private string _name;
public string Name
{
get { return _name; }
set { this.RaiseAndSetIfChanged(ref _name, value); }
}
...
}
现在每次Name
setter被调用时,它会检查是否值是新的,更新它如果是,然后将通知UI更新。