私が何らかの理由で正しくただし動作するようにWPF ListView
上のデータバインディングを取得しようとしているを変更していないが、それは常に私が試したものにかかわらずToString
によって提供された値を使用します。WPFのデータバインディング - ItemTemplateには、表示された値
は同様ですが、私は次のようなものを持っている:
private Controllers.ListController controller;
public ListTest()
{
// ...
listView.DataContext = controller;
}
private void Page_Loaded(object sender, RoutedEventArgs e)
{
var t = new Task(() =>
{
// some work to obtain data using controller...
Dispatcher.Invoke(() =>
{
listView.ItemsSource = controller.TestListSource;
});
});
t.Start();
}
これが成功し、コントローラによって提供されたデータにListView
を結合し、リストビューはIEnumerable<TestListEntry>
内部のすべてのエントリが表示されます。問題は、私はListView
がどのように各行を表示するかを変更するようには思えないということです。次のようTestListEntry
は次のとおりです。
public class TestListEntry
{
public string GivenName
{
get; set;
}
public string FamilyName
{
get; set;
}
public string DisplayName
{
get
{
return $"{ FamilyName }, { GivenName }";
}
}
}
私が最初にそうようListBox.ItemTemplate
を設定しようとしました:しかし、これは何も変わりません
<ListView Grid.Row="2" x:Name="listView">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding DisplayName}"/>
</DataTemplate>
</ListBox.ItemTemplate>
<ListView.View>
<GridView>
<GridViewColumn Header="test" />
</GridView>
</ListView.View>
</ListView>
。 WPFは、結合デバッグがオンになったことはあまりにもあまりにもエラーに関しては何も示さない、
System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=HorizontalContentAlignment; DataItem=null; target element is 'ListViewItem' (Name=''); target property is 'HorizontalContentAlignment' (type 'HorizontalAlignment')
System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=VerticalContentAlignment; DataItem=null; target element is 'ListViewItem' (Name=''); target property is 'VerticalContentAlignment' (type 'VerticalAlignment')
私もItemTemplate
内側TextBlock
の背景色を設定しようとしましたが、それはどちらか何かを変更していないものの、一見無関係な何かを示していそれで、何が起こっているのかは分かりません。私は、どちらか何も変更しませんでしたDisplayNamePath
とSelectedValuePath
<ListView ItemsSource="{Binding}" Grid.Row="2" x:Name="researcherListView" DisplayMemberPath="DisplayName" SelectedValuePath="DisplayName">
を設定しようとしました。私は、この問題を回避するためにToString
を変更することができます知っているが、私はあなたが、その内容を表示する方法を<GridViewColumn>
を指示する必要があり<ListView.View>
で<GridView>
を使用している場合、私はちょうど...
@ mm8ええ、そうです。 – Mythrillic
私は 'ListBox.ItemTemplate'を使ってコードをテストしましたが、それは完全に動作します。 'ListBox'、' TextBlock'、または 'TestListEntry'に暗黙的なスタイルやテンプレートを設定していますか? (それは 'System.Windows.Data Information'メッセージについても説明しています。)そうでない場合は、問題を特定し、[最小限で完全で検証可能な例](https://stackoverflow.com/help/mcve)を投稿してください私たちは犯人を見つけることができます。 – haindl
@haindl謝罪、私は 'ListView.View'を設定していて、それを私の答えに含めるのを忘れてしまった。 'DisplayMemberBinding =" {Binding DisplayName} "を設定することで修正できる - なぜですか?'ListView.View'の' GridViewColumn'から各列がバインディングを継承していますか? – Mythrillic