BindingExpression路径错误:'object'上找不到'DisplayName'属性

时间:2013-07-12 08:39:31

标签: wpf data-binding datatemplate

我是wpf的新手,我正在尝试使用DataTemplate创建菜单,以了解如何使用DataTemplates。

我收到以下绑定错误,控件中没有文字出现,我看不出原因。

绑定错误

System.Windows.Data Error: 40 : BindingExpression path error: 'DisplayName' property not found on 'object' ''StartOptionsViewModel' (HashCode=7730701)'. BindingExpression:Path=DisplayName; DataItem='StartOptionsViewModel' (HashCode=7730701); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')

MainWindow.XAML是:

<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Colin's Test Application" Width="600" Height="400">
    <Window.Resources>

    <!-- WIZARD STEP TEMPLATE -->
        <DataTemplate x:Key="OptionsTemplate">
            <Border x:Name="bdOuter" BorderBrush="Black" BorderThickness="0,0,1,1" CornerRadius="12" Margin="1,1,1,12" Opacity="1" SnapsToDevicePixels="True" >
                <Border x:Name="bdInner" Background="#FFFEFEFE" BorderBrush="Brown" BorderThickness="2,2,1,1" CornerRadius="12" Padding="2" >
                  <TextBlock x:Name="txt" Margin="4,0,0,0" Foreground="Black" Text="{Binding Path=DisplayName, Mode=OneWayToSource}" />
                </Border>
            </Border>
        </DataTemplate>
    </Window.Resources>

    <StackPanel VerticalAlignment="Center">
        <ItemsControl 
        ItemsSource="{Binding Path=StartOptions}" 
        ItemTemplate="{StaticResource OptionsTemplate}" 
        />
    </StackPanel>
</Window>

我的MainWindoViewModel.cs

public partial class MainWindowViewModel
{
    private List<StartOptionsViewModel> _listStartOptionsVM = new List<StartOptionsViewModel>();

    public MainWindowViewModel()
    {
        _listStartOptionsVM.AddRange(new StartOptionsViewModel[] 
        { 
            new StartOptionsViewModel(new StartOption("New Application", StartOption.StartOptionTypes.Button)),
            new StartOptionsViewModel(new StartOption("Exit Application", StartOption.StartOptionTypes.Button))
        });
    }

    public ReadOnlyCollection<StartOptionsViewModel> StartOptions 
    {
        get
        {
            return new ReadOnlyCollection<StartOptionsViewModel>(_listStartOptionsVM);
        }
    }
}

` StartOptionsViewModel.cs:

public class StartOptionsViewModel
{
    private StartOption m_startOption = null;
    public StartOptionsViewModel(StartOption p_startOption)
    {
        m_startOption = p_startOption;
    }

    #region Properties

    public string DisplayName
    {
        get { return m_startOption.DisplayName; }
        set
        {
            //...
        }

    }

    #endregion
}

1 个答案:

答案 0 :(得分:0)

首先,你是以错误的方式绑定你的文本块模式,因为文本框文本永远不会从ui设置在运行时由用户儿子设置它'smode不能是onewaytosource它应该是一种方式所以首先你应该有正确的那样的这个..

 <TextBlock
    x:Name="txt"
    Margin="4,0,0,0"
    Foreground="Black"
    Text="{Binding Path=DisplayName, Mode=OneWay}"
    />

首先使其正确并运行您的代码并在问题仍然存在时发表评论。