将ListBox内的控件绑定到ListBox源以外的源

本文关键字:ListBox 控件 绑定 | 更新日期: 2023-09-27 18:02:02

我有一个ListBox绑定到一个源,该源为内部控件的文本属性提供数据。现在我想将我的文本框的Foreground属性绑定到一个不同的源,而不是主列表框绑定到的源!

我的列表框绑定到一个ObservableCollection,我想我的文本块前景属性绑定到textColor,它位于ViewModel

public SolidColorBrush textColor
{
    get { return new SolidColorBrush(Colors.Red); }
}

均为ViewModel类。我尝试使用Foreground="{Binding textColor}",但似乎XAML根本看不到它,我应该在页面上做任何事情,以便它可以看到它,还是因为父(ListBox)使用不同的来源?

编辑:

更多细节:

我有一个DataContext.cs类,我已经定义了我的表在它。我有一个ViewModel.cs类里面有这些

public class CViewModel : INotifyPropertyChanged
{
    private CDataContext myDB;
    public CViewModel(string DBConnectionString)
    {
        myDB = new CDataContext(DBConnectionString);
    }
    private ObservableCollection<Groups> _allGroups;
    public ObservableCollection<Groups> AllGroups
    {
        get { return _allGroups; }
        set
        {
            _allGroups = value;
            NotifyPropertyChanged("AllGroups");
        }
    }
    public string textColor
    {
        get { return "Tomato"; }
    }
}
然后我有我的XAML文件MainPage.xaml:
....
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <ListBox Margin="0,8,0,0"  toolkit:TiltEffect.IsTiltEnabled="True" x:Name="list" ItemsSource="{Binding AllGroups}" HorizontalAlignment="Center"  BorderThickness="4">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid Background="Orange" Width="125" Height="125" Margin="6" Tap="Counterlist_OnTap">
                    <TextBlock Name="gname" Foreground="White" Text="{Binding Name}" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center" TextWrapping="Wrap"/>
                    <TextBlock Name="ccl" Margin="0,0,0,-5" Foreground="{Binding textColor}" Text="{Binding Count}" FontSize="26" VerticalAlignment="Bottom" HorizontalAlignment="Left" />
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>
....

我还在后面的代码中将MainPageDataContext设置为ViewModel:

this.DataContext = App.ViewModel;

将ListBox内的控件绑定到ListBox源以外的源

textColor属性是CViewModel的一部分,而不是作为ItemTemplate内数据上下文的Groups对象。

在ItemTemplate中,你可以通过下面的元素绑定联系到父视图模型:

<TextBlock Name="ccl" Margin="0,0,0,-5"
           Foreground="{Binding ElementName=ContentPanel, Path=DataContext.textColor}"
           Text="{Binding Count}" FontSize="26"
           VerticalAlignment="Bottom" HorizontalAlignment="Left" />

你所要做的就是声明一个静态类(例如,具有每个实例访问权限的单例),并显式地设置属性绑定以查看该类而不是父绑定模型。

底线:只需通过StaticResource显式设置Source