내가 무슨 이유에 대해 올바르게하지만 작동하는 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();
}
이 성공적으로 컨트롤러와 IEnumerable<TestListEntry>
내부의 모든 항목이 표시됩니다 목록보기가 제공하는 데이터에 ListView
을 결합 :
은 그대로, 나는 다음과 같은 일을합니다. 문제는 각 행에 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
와 중 아무 것도 변경하지 않은
<ListView ItemsSource="{Binding}" Grid.Row="2" x:Name="researcherListView" DisplayMemberPath="DisplayName" SelectedValuePath="DisplayName">
SelectedValuePath
을 설정했습니다. 나는이 문제를 해결하기 위해 ToString
을 변경할 수 있습니다 알고 있지만 난 그냥 뭔가를 누락 느낌 ...이
@ mm8 예, 그렇습니다. – Mythrillic
'ListBox.ItemTemplate'을 사용하여 코드를 테스트했는데 완벽하게 작동합니다. 'ListBox','TextBlock' 또는'TestListEntry'에 대해 암묵적인 스타일이나 템플릿을 설정 했습니까? (System.Windows.Data 정보 메시지도 설명 할 것입니다.) 그렇지 않다면 문제를 격리하고 [최소한의 완전하고 검증 가능한 예제] (https://stackoverflow.com/help/mcve)를 게시하십시오. 우리는 범인을 찾을 수 있습니다. – haindl
@haindl 사과, 나는 ListView.View를 설정하고 내 대답에 그것을 포함하는 것을 잊었다. 'DisplayMemberBinding = "{DisplayName DisplayName}"을 설정하여 고칠 수있는 것은 무엇입니까?ListView.View'S'GridViewColumn'에서 각 열의 바인딩을 상속합니까? – Mythrillic