数据绑定列表框时出现异常



我正在MVVM中实现一个应用程序。现在,我正在尝试创建一个自动完成功能,用于查询数据库以获取潜在结果。我现在遇到的问题是,当我尝试为列表框设置集合属性时,出现以下异常:

  System.Windows.Markup.XamlParseException occurred
  HResult=0x80131501
  Message=A 'Binding' cannot be set on the 'Path' property of type 'Binding'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.
  Source=<Cannot evaluate the exception source>

这是我的实现:

XAML

<Border Margin="5,2,5,5" Grid.Row="1" Height="Auto"
                    BorderBrush="DarkBlue"
                    BorderThickness="1" CornerRadius="4">
    <ScrollViewer VerticalScrollBarVisibility="Auto" MaxHeight="40">
        <DockPanel x:Name="DockPanelA" Margin="1,1,1,1" Background="White" Height="Auto">
            ....
            <TextBox x:Name="TextBoxA" Background="{x:Null}" 
                     BorderThickness="0" Width="Auto"
                     CaretBrush="SteelBlue" FontSize="14" Foreground="SteelBlue" FontFamily="Calibri" TextAlignment="Left"
                     TextChanged="TextBoxA_TextChanged"/>
        </DockPanel>
    </ScrollViewer>
</Border>
<ListBox Grid.Row="1" Margin="5,2,5,5" MaxHeight="200" Width="{Binding ActualWidth, ElementName=DockPanelA}"
             ScrollViewer.VerticalScrollBarVisibility="Auto"  HorizontalAlignment="Stretch"
             Background="AliceBlue" BorderBrush="DarkBlue" Foreground="SteelBlue" VirtualizingStackPanel.IsVirtualizing="False"
             ItemsSource="{Binding Path=MyCollection, Mode=TwoWay}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock>
                <TextBlock.Text>
                    <MultiBinding StringFormat="{}{0} {1}">
                        <Binding Path="{Binding Symbol}"/>
                        <Binding Path="{Binding Name}"/>
                    </MultiBinding>
                </TextBlock.Text>
            </TextBlock>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

C# 视图模型

public class ViewModel : INotifyPropertyChanged
{
    private ObservableCollection<ListData> _myListItems;
    ...
    public ObservableCollection<ListData> MyListItems
    {
        get { return _myListItems; }
        set { _myListItems = value; NotifyPropertyChanged("MyListItems"); }
    }
    ...
    protected virtual void NotifyPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = this.PropertyChanged;
        if (handler != null)
        {
            var e = new PropertyChangedEventArgs(propertyName);
            handler(this, e);
        }
    }
    ...
    public void DataSearch(object param)
    {
        ...
        Task t = Task.Run(async () =>
        {
            await Task.Delay(5000);
            try
            {
                currSrc.Token.ThrowIfCancellationRequested();
                IList<ListData> newList = Helper.QueryData(searchString);
                currSrc.Token.ThrowIfCancellationRequested();
                MyListItems = new ObservableCollection<ListData>(newList);
                //Exception is Thrown from this
            }
            catch (Exception e)
            {
            }
        });
        ...
    }
    ...
}
public class InputHandler : ICommand
{
    //View calls this and this calls DataSearch as a result
}

我一直在试图弄清楚为什么会发生这种情况,因为我以这种方式数据绑定的其他属性可以正常工作。有谁知道为什么抛出此异常以及如何解决它?

<ListBox.ItemTemplate>
    <DataTemplate>
        <TextBlock>
            <TextBlock.Text>
                <MultiBinding StringFormat="{}{0} {1}">
                    <Binding Path="Symbol"/>
                    <Binding Path="Name"/>
                </MultiBinding>
            </TextBlock.Text>
        </TextBlock>
    </DataTemplate>
</ListBox.ItemTemplate>

最新更新