【发布时间】:2017-12-02 00:07:45
【问题描述】:
UWP 中的订单表单使用模板 10 将产品添加到订单中。错误是
Invalid binding path 'OrderViewModel.FindProduct_TextChanged' : Property 'OrderViewModel' can't be found on type 'ProductViewModel'
相关的xaml sn-p是
<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 中的相关 sn-p
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()
{
}
}
}
如何从引用 ProductViewModel 的 GridView 的 DataTemplate 中正确引用 OrderViewModel 上的 FindProduct_TextChanged?
【问题讨论】:
-
你使用
OrderViewModel.Products作为ItemsSource,这意味着x:DataType必须是Product并且FindProduct_TextChanged方法必须放在里面。 -
谢谢@tao。我不太清楚你的意思。
Product不是OrderViewModel的成员,但Products是OrderViewModel的成员。FindProduct_TextChanged更新了OrderViewModel.Products,所以我看不出除了OrderViewModel之外的任何地方。还是我误会了?您能否提供一个代码 sn-p 来说明您的意思?
标签: xaml uwp uwp-xaml template10