我无法在MVVM设计模式中获取DataTemplate
的文本属性绑定。
为了说明下面的问题,我对我的问题进行了简化,将两个不同的视图属性绑定到同一个模型属性(也称为AnObject.Text
)。
我在MainWindow.xaml
中的代码是:
...
<Button Grid.Row="0" Content="{Binding ButtonText}" />
...
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto">
<ItemsControl ItemsSource="{Binding MyItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<DockPanel>
<Label Content="aaaaa" />
<TextBlock Text="{Binding ItemText}" />
</DockPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
...
我在MainWindow.xaml.cs
后面的代码(它为Button
和<ItemsControl ItemsSource>
中的每个项目设置了相同的DataContext
):
public MainWindow()
{
InitializeComponent();
DataContext = new MainWindowViewModel();
}
我在MainWindowViewModel.cs
中的代码是:
...
public ObservableCollection<object> MyItems => MyConverter.GetCollection(MyData.List);
public string ItemText => "dddd"; // this DOES works
public string ItemText => AnObject.Text; // this does NOT work
...
public string ButtonText => AnObject.Text; // this DOES works (note, same object property!)
...
为什么我在DataTemplate
里面的绑定不起作用?
2条答案
按热度按时间lxkprmvk1#
这里有各种各样的事情要理解:
1.对于ItemsControl,DataContext与Button相同,即MainWindowViewModel示例。
ItemText
的公共属性,它将作为Dockpanel的DataContext。在您的情况下,ItemText属性不是列表中对象的一部分。
2skhul332#
您可能需要添加DataContext,并设置RelativeSource。
如果ItemText仅是集合中一个项的文本,则此操作应该有效。
如果ItemText是DataContext的某个属性,则需要像这样添加DataContext...