XAML 将TokenizingTextBox.TokenItem绑定到ViewModel可观察属性(TemplateStudio for WinUI)

oug3syen  于 2023-08-01  发布在  其他
关注(0)|答案(1)|浏览(92)

我有一个ViewModel,其中包含一个observable属性

[ObservableProperty]
private IList<string> _selectedTokens;

字符串
此属性已初始化如下:

_selectedTokens = new List<string>();
_selectedTokens.Add(@"Z:\Exchange");


此属性绑定到TokenizedTextBox,如下所示

<controls:TokenizingTextBox
    x:Name="TokenBox"
    MaxHeight="104"
    HorizontalAlignment="Stretch"
    ItemsSource="{x:Bind ViewModel.SelectedTokens}"
    MaximumTokens="3"
    PlaceholderText="Add Locations"
    TextMemberPath="Text"
    TokenDelimiter=",">
    <controls:TokenizingTextBox.SuggestedItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <SymbolIcon Symbol="Accept" />
                <TextBlock
                    Padding="4,0,0,0"
                    Text="ttt" />
            </StackPanel>
        </DataTemplate>
    </controls:TokenizingTextBox.SuggestedItemTemplate>
    <controls:TokenizingTextBox.TokenItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <SymbolIcon Symbol="Admin" />
                <TextBlock
                    Padding="4,0,0,0"
                    Text="{Binding ???}" />
            </StackPanel>
        </DataTemplate>
    </controls:TokenizingTextBox.TokenItemTemplate>
    <controls:TokenizingTextBox.QueryIcon>
        <SymbolIconSource Symbol="Add" />
    </controls:TokenizingTextBox.QueryIcon>
</controls:TokenizingTextBox>


这段代码是工作,除了我没有看到通过ViewModel初始化添加的tokenbox中的文本,我只能看到图标。如你所见,我已经写好了。在xaml代码中,我应该将我的集合绑定到数据模板,但我只是不知道如何正确绑定集合并使其工作,因此我可以看到文本以及图标...
提前感谢你,最好的问候,马克。
P.S.
上面的xaml代码是从“WinUI Gallery 2.0”应用程序中借用和采用的

bn31dyow

bn31dyow1#

将项目添加到List不会通知UI更新。在这种情况下,至少需要使用ObservableCollection而不是List

_selectedTokens = new ObservableCollection<string>();

字符串

更新

DataTemplate应该是这样的:

<controls:TokenizingTextBox.TokenItemTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal">
            <SymbolIcon Symbol="Admin" />
            <TextBlock
                Padding="4,0,0,0"
                Text="{Binding}" />
        </StackPanel>
    </DataTemplate>
</controls:TokenizingTextBox.TokenItemTemplate>


或者更好:

<controls:TokenizingTextBox.TokenItemTemplate>
    <DataTemplate x:DataType="x:String">
        <StackPanel Orientation="Horizontal">
            <SymbolIcon Symbol="Admin" />
            <TextBlock
                Padding="4,0,0,0"
                Text="{x:Bind Mode=OneWay}" />
        </StackPanel>
    </DataTemplate>
</controls:TokenizingTextBox.TokenItemTemplate>

相关问题