【发布时间】:2025-12-05 10:50:02
【问题描述】:
我有一个带有 UserControl 的 MainWindow。
MainWindow 绑定到一个 ViewModel,即它的 DataContext。
现在使用 MainWindowViewModel,我想在 UserControl 中绑定某些控件。
对于我要绑定的每个元素,UserControl 都有一个 DependencyProperty。
我正在从 MainWindow 将 UserControl 的 DependencyProperties 绑定到 MainWindowViewModel,但绑定不起作用。
主窗口 XAML:
<Grid >
<userControls:MultiSelectEnvironmentContextControl EnvironmentVersions="{Binding EnvironmentVersions}" x:Name="MultiSelectEnvironmentContextControl" Margin="10" />
</Grid>
用户控件 XAML:
<ComboBox Grid.Column="0" Grid.Row="0" x:Name="ComboBoxVersions" SelectedIndex="0" Margin="10" ItemsSource="{Binding EnvironmentVersions}">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Version " />
<TextBlock Text="{Binding}" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
UserControl 后面的代码:
public partial class MultiSelectEnvironmentContextControl
{
public MultiSelectEnvironmentContextControl()
{
InitializeComponent();
this.DataContext = this;
}
public IEnumerable<string> EnvironmentVersions
{
get { return (IEnumerable<string>)GetValue(EnvironmentVersionsProperty); }
set { SetValue(EnvironmentVersionsProperty, value); }
}
// Using a DependencyProperty as the backing store for EnvironmentVersions. This enables animation, styling, binding, etc...
public static readonly DependencyProperty EnvironmentVersionsProperty =
DependencyProperty.Register("EnvironmentVersions", typeof(IEnumerable<string>), typeof(MultiSelectEnvironmentContextControl), new PropertyMetadata(default(IEnumerable<string>)));
}
主窗口视图模型:
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;
using Geico.Applications.Business.CoverageTestHarness.DomainLayer;
namespace Geico.Applications.Business.CoverageTestHarness.UIWPF.ViewModels
{
class TestRunnerControlViewModel: ViewModelBase
{
private DomainFacade domainFacade;
/// <summary>
/// Initializes a new instance of the <see cref="TestRunnerControlViewModel"/> class.
/// </summary>
public TestRunnerControlViewModel()
{
domainFacade = ((App) Application.Current).DomainFacade;
}
/// <summary>
/// Gets the environment versions.
/// </summary>
/// <value>
/// The environment versions.
/// </value>
public IEnumerable<string> EnvironmentVersions
{
get
{
return domainFacade.GetEnvironmentVersions();
}
}
}
}
【问题讨论】:
-
输出中有哪些绑定错误?
-
@netaholic 我在输出窗口中看不到任何错误。只是数据没有来,应该在绑定之后来。
-
您的 ViewModel 类是私有的。公开
-
@netaholic 这是内部的,现在公开。结果相同。看不到任何数据。
-
你能做一个简单的项目来说明这个问题吗?只需 1 个依赖属性、用户控件、主窗口、视图模型和测试数据,无需使用 3rd 方库。