Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# wpf自动完成盒绑定_C#_Wpf_Xaml_Binding_Autocompletebox - Fatal编程技术网

C# wpf自动完成盒绑定

C# wpf自动完成盒绑定,c#,wpf,xaml,binding,autocompletebox,C#,Wpf,Xaml,Binding,Autocompletebox,我创建了一些用户控件,这些控件包装了一些标准控件,例如:textbox/combobox+Image+textblock。我正在尝试用AutoCompleteBox做同样的事情,但到目前为止失败了。。。 项目列表显示良好,我可以选择na项目,但这不会触发对SelectedItem的更改。我对combobox使用了几乎相同的代码,所以不确定出了什么问题 无论如何,我已经在AutoCompleteBox上使用了ValueMemberPath/ValueMemberBinding,但不确定这是否可行

我创建了一些用户控件,这些控件包装了一些标准控件,例如:textbox/combobox+Image+textblock。我正在尝试用AutoCompleteBox做同样的事情,但到目前为止失败了。。。 项目列表显示良好,我可以选择na项目,但这不会触发对SelectedItem的更改。我对combobox使用了几乎相同的代码,所以不确定出了什么问题

无论如何,我已经在AutoCompleteBox上使用了ValueMemberPath/ValueMemberBinding,但不确定这是否可行

UserControl xaml:

<Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="3*" />
        </Grid.ColumnDefinitions>

        <Grid Grid.Column="0" Margin="0,0,2,0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>

            <Image Source="{Binding ElementName=ACProperty, Path=ImageSource}" VerticalAlignment="Center"
                   MaxHeight="30" MaxWidth="30" Margin="1" Grid.Column="0" RenderOptions.BitmapScalingMode="HighQuality"/>

            <TextBlock Text="{Binding ElementName=ACProperty, Path=Label}" VerticalAlignment="Center"
                       HorizontalAlignment="Left" Grid.Column="1" Margin="1" TextWrapping="Wrap" Width="100" />
        </Grid>

        <toolkitInput:AutoCompleteBox FilterMode="ContainsOrdinal" IsTextCompletionEnabled="True"
                                      ItemsSource="{Binding ElementName=ACProperty, Path=ItemsSource}" 
                                      SelectedItem="{Binding ElementName=ACProperty, Path=SelectedItem}"
                                      MinimumPrefixLength="2"
                                      MinimumPopulateDelay="300"
                                      VerticalAlignment="Center"
                                      HorizontalAlignment="Stretch" Grid.Column="1" Margin="1,1,2,1" />

    </Grid>
在我想使用它的UserControl/窗口中:

<cont:AutoCompleteProperty Label="Product Category"
                            ItemsSource="{Binding Path=ProductCategories}"
                            SelectedItem="{Binding Path=ProductCategory}"
                            ImageSource="..."/>

我对您的绑定做了一些更改

观察usercontrol数据上下文

<UserControl x:Class="WpfApplication1.AutoCompleteProperty"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             xmlns:toolkitInput="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"
             d:DesignHeight="300" d:DesignWidth="300" DataContext="{Binding RelativeSource={RelativeSource Self}}">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="3*" />
        </Grid.ColumnDefinitions>

        <Grid Grid.Column="0" Margin="0,0,2,0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>

            <Image Source="{Binding ImageSource}" VerticalAlignment="Center" MaxWidth="100" Margin="1" Grid.Column="0" RenderOptions.BitmapScalingMode="HighQuality"/>

            <TextBlock Text="{Binding Label}" VerticalAlignment="Center"
                       HorizontalAlignment="Left" Grid.Column="1" Margin="1" TextWrapping="Wrap" Width="100" />
        </Grid>

        <toolkitInput:AutoCompleteBox FilterMode="ContainsOrdinal" IsTextCompletionEnabled="True"
                                      ItemsSource="{Binding ItemsSource}" 
                                      SelectedItem="{Binding SelectedItem}"
                                      MinimumPrefixLength="2"
                                      MinimumPopulateDelay="300"
                                      VerticalAlignment="Center"
                                      HorizontalAlignment="Stretch" Grid.Column="1" Margin="1,1,2,1" />

    </Grid>
</UserControl>


并且在代码隐藏文件中没有任何更改

我已经在下面的代码中更新了绑定

<UserControl x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         Height="350" Width="525"
             xmlns:toolkitInput="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"
             x:Name="root"
             >
    <Grid>![enter image description here][1]
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="3*" />
        </Grid.ColumnDefinitions>

        <Grid Grid.Column="0" Margin="0,0,2,0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>

            <Image Source="{Binding ImageSource,ElementName=root}" VerticalAlignment="Center" MaxWidth="100" Margin="1" Grid.Column="0" RenderOptions.BitmapScalingMode="HighQuality"/>

            <TextBlock Text="{Binding Label,ElementName=root}" DataContext="{Binding RelativeSource={RelativeSource Self}}" VerticalAlignment="Center"
                       HorizontalAlignment="Left" Grid.Column="1" Margin="1" TextWrapping="Wrap" Width="100" />
        </Grid>

        <toolkitInput:AutoCompleteBox FilterMode="ContainsOrdinal" IsTextCompletionEnabled="True"
                                      ItemsSource="{Binding ItemsSource,ElementName=root}"
                                      SelectedItem="{Binding SelectedItem,ElementName=root}"
                                      MinimumPrefixLength="2"
                                      MinimumPopulateDelay="300"
                                      VerticalAlignment="Center"
                                      HorizontalAlignment="Stretch" Grid.Column="1" Margin="1,1,2,1" />

    </Grid>

</UserControl>

![在此处输入图像描述][1]
下面是使用上述代码的窗口图像

很好的尝试,但是设置了DataContext后,弹出列表甚至都不会出现。谢谢你的帮助,但实际上是另外一回事,将SelectedItem绑定模式设置为TwoWay成功了,尽管我不确定BindsTwoWayByDefault后面的代码中为什么设置为True。。。作为你努力的回报。
<UserControl x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         Height="350" Width="525"
             xmlns:toolkitInput="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"
             x:Name="root"
             >
    <Grid>![enter image description here][1]
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="3*" />
        </Grid.ColumnDefinitions>

        <Grid Grid.Column="0" Margin="0,0,2,0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>

            <Image Source="{Binding ImageSource,ElementName=root}" VerticalAlignment="Center" MaxWidth="100" Margin="1" Grid.Column="0" RenderOptions.BitmapScalingMode="HighQuality"/>

            <TextBlock Text="{Binding Label,ElementName=root}" DataContext="{Binding RelativeSource={RelativeSource Self}}" VerticalAlignment="Center"
                       HorizontalAlignment="Left" Grid.Column="1" Margin="1" TextWrapping="Wrap" Width="100" />
        </Grid>

        <toolkitInput:AutoCompleteBox FilterMode="ContainsOrdinal" IsTextCompletionEnabled="True"
                                      ItemsSource="{Binding ItemsSource,ElementName=root}"
                                      SelectedItem="{Binding SelectedItem,ElementName=root}"
                                      MinimumPrefixLength="2"
                                      MinimumPopulateDelay="300"
                                      VerticalAlignment="Center"
                                      HorizontalAlignment="Stretch" Grid.Column="1" Margin="1,1,2,1" />

    </Grid>

</UserControl>