我不断收到以下错误消息:
System.Windows.Data错误:40:BindingExpression路径错误: 'object'“ManageTabViewModel”上找不到'TabToAdd'属性;目标 property是'Text'(类型'String')。
System.Windows.Data错误:40:BindingExpression路径错误: 'object'上找不到'TabbableViewModel'属性 “ManageTabsViewModel”。
BindingExpression:路径= TabbableViewModel;的DataItem = 'ManageTabViewModel'; target元素是'TextBox'(Name ='');目标属性是 'DataContext'(输入'Object')。
每当我尝试将文本框绑定到视图模型时,就会发生这种情况。到目前为止,这是我的代码:
ManageTabsViewModel.xaml
<TextBox DataContext="{Binding TabbableViewModel}" Text="{Binding Path=TabsToAdd}" Width="250" HorizontalAlignment="Left" Margin="6,0,0,6"></TextBox>
ManageTabsViewModel.cs
public class TabbableViewModel: ITabbableViewModel, INotifyPropertyChanged
{
public ITabbable Tabbable {get; set};
public IEnumerable<ITabViewModel> Tabs { get; set }
private IEnumerable<string> _tabsToAdd;
public IEnumerable<string> TabsToAdd
{
get { return _tabsToAdd }
set
{
if(Equals(value, _tabsToAdd))
return;
_tabsToAdd = value
OnPropertyChanged("TabsToAdd");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
public interface ITabbable
{
IEnumerable<string> TabsToAdd { get; set; }
}
public interface ITabbableViewModel
{
ITabbable Tabbable { get; set; }
}
public class ManageTabsViewModel : IManageTabsViewModel
{
public void SetTabbable(IEnumerable<ITabbable> tabbable)
{
TabbableItems = tabbable;
ExpandedTabbableItems = (from t in TabbableItems
from u in t.Tabs.DefaultIfEmpty()
select new TabbableViewModel()
{
Tabbable = t,
Tabs = t.Tabs,
TabsToAdd = t.TabsToAdd
}).ToArray();
}
public IEnumerable<ITabbableViewModel> ExpandedTabbableItems { get; set; }
public IEnumerable<ITabbable> TabbableItems { get; set; }
}
public interface IManageTabsViewModel
{
void SetTabbable(IEnumerable<ITabbable> tabbable);
IEnumerable<ITabbable> TabbableItems { get; }
IEnumerable<ITabbableViewModel> ExpandedTabbableItems { get; }
}
答案 0 :(得分:1)
您将DataContext
的{{1}}绑定到一个没有任何意义的类 - 您需要绑定到该类的特定实例。< / p>
此外,您将TextBox
绑定到TextBox.Text
;这看起来应该是TabToAdd
- 属性的实际名称(注意缺少 s )。
如果你看一下这条消息:
System.Windows.Data错误:40:BindingExpression路径错误:&#39; TabbableViewModel&#39;在&#39; object&#39;上找不到的属性&#34; ManageTabsViewModel&#34;
...很明显,您已经TabsToAdd
作为ManageTabsViewModel
了。这意味着如果有意义,您可以访问DataContext
的属性。 ManageTabsViewModel
与ManageTabsViewModel
最接近的是TabbableViewModel
IEnumerable
,意思是
TabbableItems
可能有意义。
您尝试绑定到TabbableItems[0]
的{{1}}媒体资源也是TabsToAdd
,因此我无法正确了解您希望展示的内容在文本框中 - 它可能是由TextBox.Text
生成的类名。 (但是,您可以通过转换器将此更改为逗号分隔的字符串列表。)或者您可以绑定到IEnumerable
以获取第一个(或者,如果列表为空,则出现错误)
IEnumerable.ToString
从其父级继承其TabsToAdd[0]
。但是,您可以将其设置为代码隐藏的任何内容。在XAML中为它命名:
TextBox
在代码隐藏构造函数中,分配DataContext:
DataContext
由于代码不完整,因此很难看到您的目标是什么 - 如果您可以将此问题简化为最简单的问题示例,那么建议会更容易。 / p>