2013-07-12 88 views
0

我是wpf的新手,我嘗試使用DataTemplate創建菜單,以瞭解如何使用DataTemplates。BindingExpression路徑錯誤:'對象'上找不到'DisplayName'屬性

我得到以下綁定錯誤,並沒有文字出現在控制中,我看不出爲什麼。

綁定錯誤

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 
} 
+0

'OneWayToSource'從'Xaml'綁定到'object','OneWay'從'object'到'Xaml',在你的情況下你想使用'OneWay',因爲你沒有設置對象和「TextBlock」無法編輯。 –

回答

0

首先,你是以錯誤的方式綁定你的文本塊模式,因爲文本框文本永遠不會從ui的意思在運行時由用戶兒子它'smode不能onewaytosource它應該是一種方式,所以首先你應該有正確的,像這..

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

首先使它正確並運行你的代碼和評論,如果你的問題依然存在。

+0

感謝您的回覆。我已經改變了你的建議,但我仍然遇到同樣的問題。 – user1683456

+0

我不明白這是因爲從錯誤它指向正確的類,並看着正確的屬性,我知道屬性存在於類和返回類型是正確的。 – user1683456

+0

它的工作。不知道我做了什麼。 – user1683456

相關問題