2016-11-10 3 views
0

のViewModelは一方向モードが

namespace My.ViewModels 
{ 
    public class ItemViewModel : ObservableObject 
    { 
     private ItemModel _model; 

     public ItemViewModel(ItemModel model) 
     { 
      _model = model; 
     } 

     public string Name { get { return _model.Name; } } 
    } 
} 

XAML

<UserControl x:Class="My.Controls.ItemControl" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:viewModels="clr-namespace:My.ViewModels" 
      mc:Ignorable="d" 
      d:DesignHeight="421" d:DesignWidth="786" 
      d:DataContext="{d:DesignInstance viewModels:ItemViewModel}"> 
    <Grid Background="White"> 
     <TextBlock><Run Text="Name:" /> <Run Text="{Binding Name, FallbackValue=Name, Mode=OneWay}" /></TextBlock> 
    </Grid> 
</UserControl> 

エラーを設定してもして読み取り専用のプロパティを読み取ることができません。私のViewModelから読み込み専用のプロパティ。 私はバインディングモードをOneWayに設定しましたが、それでもまだ上記のエラーがスローされます。 私は手がかりから外れています!どんな助けもありがとう。

+3

あなたはこのプロパティにバインドする唯一の場所ですか? 'TextBlock'を完全にコメントアウトするとどうなりますか? – dymanoid

+0

@Taelia、あなたのプロパティ "名前"にはセッターがありません。あなたがTwoWayをバインドすると、そのエラーが発生します。また、私が知っていることから、TextBlockを編集することはできません。 –

+0

@dymanoid私は暗闇の中で撮影するあなたの能力に非常に驚いていて、やや恥ずかしいことは単純なものでした。私のコードの中のどこかには、Mode = Onewayを適用しなかった残りの参照がありました。ありがとうございました! – Taelia

答えて

0

OneWayバインディングを使用するには、プロパティが取得および設定されている必要があります。この場合、この問題を解決するには、次のようにあなたのプロパティに設定を追加してください:

public string Name { private set; get { return _model.Name; } 
+0

基本クラスに読み取り専用のプロパティを保持したいので、TwoWayバインディングではなくOneWayバインディングを使用します。しかし、努力をいただきありがとうございます! – Taelia

+0

@Taelia私は答えを更新しました。 –

関連する問題