WPF Combobox DisplayMemberPath
Ok, przejrzałem inne pytania i nie dostałem odpowiedzi, więc mam nadzieję, że ktoś tutaj może.
Bardzo proste pytanie dlaczego właściwość DisplayMemberPath nie jest powiązana z elementem?
<ComboBox Grid.Row="1" Grid.Column="2" ItemsSource="{Binding PromptList}" DisplayMemberPath="{Binding Name}" SelectedItem="{Binding Prompt}"/>
Wyjście śledzenia pokazuje, że próbuje powiązać z klasą posiadającą IEnumerable, a nie rzeczywistą pozycję w IEnumerable. Jestem zdezorientowany co do prostego sposobu wypełnienia comboboxu bez dodawania kilku linii a w xaml.
Po prostu wywołuje ToString () dla obiektu w itemssource. Mam pracę wokół której jest to:
<ComboBox Grid.Row="1" Grid.Column="2" ItemsSource="{Binding PromptList}" SelectedItem="{Binding Prompt}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Ale moim zdaniem to za dużo jak na tak proste zadanie. Czy mogę użyć wiązania relativesource? 5 answers
DisplayMemberPath
określa ścieżkę do właściwości display string dla każdego elementu. W Twoim przypadku ustawiłbyś to na "Name"
, a nie "{Binding Name}"
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-22 15:00:38
Nie jesteś związany z danymi w klasie, mówisz jej, aby pobrała dane od członka klasy, który jest nazwany przez członka "name", więc jeśli twoja instancja mA item.Name == "steve"
, próbuje pobrać dane z item.steve
.
Aby to zadziałało, powinieneś usunąć Wiązanie ze ścieżki członkowskiej. Zmień go na MemberPath = "Name"
to mówi mu, aby pobierał dane z członka "Name". W ten sposób wywoła item.Name
, a nie item.steve
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-05 12:03:25
Możesz usunąć DisplayMemberPath, a następnie ustawić ścieżkę w bloku tekstowym.
DisplayMemberPath jest naprawdę dla, gdy nie masz ItemTemplate.
Możesz też usunąć ItemTemplate i użyć DisplayMemberPath - w takim przypadku zasadniczo tworzy dla Ciebie blok tekstowy.
Nie polecam robić obu.
<TextBlock text="{Binding Path=Name, Mode=OneWay}"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-20 17:20:55
Należy zmienić MemberPath="{Binding Name}"
na MemberPath="Name"
. Wtedy zadziała.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-05 12:05:12
Alternatywnie nie musisz ustawiać ścieżki DisplayMemberPath. możesz po prostu dodać nadpisanie ToString () do obiektu, który znajduje się na liście monitów. tak:
class Prompt {
public string Name = "";
public string Value = "";
public override string ToString() {
return Name;
}
}
Funkcja ToString() zostanie automatycznie wywołana i wyświetli parametr Name Z twojej klasy. działa to dla Comboboxów, Listboxów itp.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-18 20:03:28