使用模板10的UWP中的订单表单将产品添加到订单中。错误是
Invalid binding path 'OrderViewModel.FindProduct_TextChanged' : Property 'OrderViewModel' can't be found on type 'ProductViewModel'
相关的xaml片段是
<Page.DataContext>
<ViewModels:MainPageViewModel x:Name="OrderViewModel" />
</Page.DataContext>
<GridView ItemsSource="{x:Bind OrderViewModel.Products, Mode=TwoWay}">
<GridView.ItemTemplate>
<DataTemplate x:DataType="ViewModels:ProductViewModel" >
<AutoSuggestBox
Name="ProductAutoSuggestBox"
TextMemberPath="{x:Bind ItemCode, Mode=TwoWay}"
TextChanged="{x:Bind OrderViewModel.FindProduct_TextChanged}">
</AutoSuggestBox>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
OrderViewModel和ProductViewModel的相关代码段
namespace ViewModels
{
public class OrderViewModel : ViewModelBase
{
public ObservableCollection<Product> Products { get; set; } = new ObservableCollection<Product>();
public void FindProduct_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
{ ... }
}
public class ProductViewModel : ViewModelBase
{
string _ItemCode = default(string);
public string ItemCode { get { return _ItemCode; } set { Set(ref _ItemCode, value); } }
public ProductViewModel()
{
}
}
}
如何在引用FindProduct_TextChanged
的GridView的DataTemplate中OrderViewModel
正确引用ProductViewModel
?
答案 0 :(得分:3)
投票至@tao的评论。 @Vague,我想你可能会误解x:DataType
的用途。您可以参考Data binding in depth的“DataTemplate和x:DataType”部分:
在数据模板中使用{x:Bind}时,可以在编译时验证其绑定(以及为它们生成有效的代码),DataTemplate需要使用x:DataType声明其数据对象的类型。
对于您的方案,从您的代码public ObservableCollection<Product> Products { get; set; } = new ObservableCollection<Product>();
开始,DataTemplate
的数据对象的类型应该是您的Product
类,而不是您的ProductViewModel
,并且同时,您必须在此FindProduct_TextChanged
课程中找到Product
个活动,这意味着您的FindProduct_TextChanged
代码应放在Product
数据模型中。
顺便说一句,我认为没有必要对TwoWay
使用ItemsSource
绑定。对于这种情况,绑定目标是ItemsSource
GridView
,绑定源是ObservableCollection<Product> Products
,我知道您希望在更新集合时更新GridView
,这是工作已完成ObservableCollection。此外,只有绑定源可以更改为通知绑定目标,因此OneWay
绑定就足够了。但这对你的代码来说不是一个大问题。
所以对于你的GridView
,它应该是这样的:
<GridView ItemsSource="{x:Bind OrderViewModel.Products, Mode=OneWay}">
<GridView.ItemTemplate>
<DataTemplate x:DataType="Models:Product" >
<AutoSuggestBox
Name="ProductAutoSuggestBox"
TextMemberPath="{x:Bind ItemCode, Mode=TwoWay}"
TextChanged="{x:Bind FindProduct_TextChanged}">
</AutoSuggestBox>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
答案 1 :(得分:0)
如果错误是这样的,我批准了它的charset支持错误: 错误无效的绑定路径&#39; XX.YY&#39; :物业&#39; ZZ&#39;无法在类型&#39; CCC&#39;
上找到xaml和C#都支持unicode; 因为你在类属性中使用非ascii字符。这是我今天发现的一个错误。只需将您的类proprty字符重命名为ascii标准。希望它能得到解决。