私はWPF/PRISMベースのアプリケーションを開発しています。親ビュー(usercontrol)には多くの領域があり、子ビュー(usercontrol)はそれらの領域にロードされます。子ビューが読み込まれると、コンソールにバインディングエラーが表示されます。バインドされたプロパティが子ビューのビューモデルの一部であっても、バインディングの解像度は親ビューのビューモデルを最初に見て、このエラーをスローします。アプリケーションは正常に動作しますが、私はこれらのエラーを取り除くことができるかどうかを知りたいのです。子のユーザコントロールのBindingExpressionパスエラー
私が書いた簡単なアプリでこれを再現することができました。
C#
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
this.Loaded += (o, e) => { this.layout.DataContext = new ViewModel(); };
}
}
public class ViewModel
{
public ViewModel()
{
this.SampleText = "Sample";
}
public string SampleText { get; set; }
}
XAML
<Window x:Class="DataBindingResolution.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase"
Title="MainWindow" Height="350" Width="525">
<Grid x:Name="layout">
<Grid.Resources>
<TextBlock x:Key="test" Text="{Binding SampleText}"/>
</Grid.Resources>
<Button Content="{StaticResource test}"/>
</Grid>
</Window>
あなたはこのサンプルを実行すると、あなたが見ることができます:
ボタンが正しく、「テキストを示していても、コンソールに印刷されたばかりSystem.Windows.Data Error: 39 : BindingExpression path error: 'SampleText' property not found on 'object' ''MainWindow' (Name='')'. BindingExpression:Path=SampleText; DataItem='MainWindow' (Name=''); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')
をその中に「サンプル」があります。このメッセージがコンソールに表示されないようにするにはどうすればいいですか?私のアプリケーションは、読み込まれた子ビューごとに25以上のエラーを出力します。
親はビューが注入されているプリズム領域がすべてロードされていることを知らない。 – anivas
この場合、各子ビューはスタンドアロンです。ビューを作成するプロセスは、ViewModelを子ビューに挿入する必要があります。ビューとビューモデルを解決するためにUnityを使用している場合は、両方を1つのステップで行うことができます。 http://www.wintellect.com/CS/blogs/sloscialo/archive/2011/05/19/yet-another-way-to-attach-viewmodels-to-views.aspx – SergioL
を参照してください。それは、それがビューモデル解像度と関係しているとは決して考えられませんでした。ありがとう。 – anivas