私は WPF アプリケーションを作成していますが、パフォーマンスが少し遅いので、解決しようとしています。実行すると、次のような種類のメッセージが大量に表示されます。
System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=(0); DataItem=null; target element is 'Control' (Name=''); target property is 'Visibility' (type 'Visibility')
System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=AreRowDetailsFrozen; DataItem=null; target element is 'DataGridDetailsPresenter' (Name=''); target property is 'SelectiveScrollingOrientation' (type 'SelectiveScrollingOrientation')
System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=HeadersVisibility; DataItem=null; target element is 'DataGridRowHeader' (Name=''); target property is 'Visibility' (type 'Visibility')
System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=ValidationErrorTemplate; DataItem=null; target element is 'Control' (Name=''); target property is 'Template' (type 'ControlTemplate')
ちょっとしたサンプル アプリケーションを作成すると、次のようになります。
<Window x:Class="bindingerrors.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:bindingerrors="clr-namespace:bindingerrors" Title="MainWindow">
<Window.Resources>
<bindingerrors:Thinger x:Key="Thing" />
</Window.Resources>
<StackPanel>
<DataGrid x:Name="TheGrid" ItemsSource="{Binding Stuff, Source={StaticResource Thing}}" AutoGenerateColumns="False" HeadersVisibility="Column">
<DataGrid.Columns>
<DataGridTextColumn Header="!" Binding="{Binding A, FallbackValue=''}" />
<DataGridTextColumn Header="#" Binding="{Binding I, FallbackValue=''}" />
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Window>
そして、次のオブジェクト定義:
public class Thinger
{
public ObservableCollection<ARow> Stuff { get; private set; }
public Thinger()
{
//Fill up some bogus data
string letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int i = 0;
Stuff = new ObservableCollection<ARow>();
foreach (var letter in letters)
{
Stuff.Add(new ARow(letter.ToString(),i));
i++;
}
}
}
public class ARow
{
public string A { get; private set; }
public int I { get; set; }
public ARow(string a, int i)
{
A = a;
I = i;
}
}
実行すると、これらの拘束力のある問題が山ほど発生します。多くの WPF パフォーマンスに関する記事では、失敗したバインディングがパフォーマンスに深刻な影響を与える可能性があると主張しているため、これが多くの問題の原因であると思われます。
何が起こっている?これらの失敗したバインディングを削除するにはどうすればよいですか? 私が提供した例は、問題の兆候を示しながら作成できるのと同じくらい簡単ですが、うまくいくはずですよね? 違いがあれば、.net 4.0用に構築しています。
編集:サンプル コードをビルドしてみると、エラーが抑制される場合があります。Visual Studio のオプション -> デバッグ -> 出力ウィンドウ -> データバインディングで、「情報」に設定されていることを確認します。
Get many Binding "Information" in WPF output windowを見てきましたが、それについて何をすべきかについての情報はありません。
ありがとう