WPF - uzupełnianie jednej kontrolki tekstem, który przechowywany jest w zmiennej.

0

Witajcie ponownie - wczoraj założyłem podobny wątek, tylko nie miałem za bardzo siły żeby ogarniać życie, ten problem. Dodatkowo nie opisałem chyba wszystkiego należycie, założę temat ponownie i proszę o konkretne odpowiedzi. Nie ukrywam, że jest mi to potrzebne jednorazowo, muszę to zrobić i już. Całego kodu nie chcę za bardzo wklejać, ponieważ projekt jest rozległy (będę wklejał moje sugestie i pomysły, jak coś to najwyżej na PW podeślę). W każdym razie przechodząc do sedna mojego "problemu": Posiadam sobie jakieś okienko w WPF, w którym osadzone są różne kontrolki. Jedna z tych kontrolek będzie miała za zadanie wyświetlać ścieżkę pliku, który załaduję. Na samym wstępie nie wiem za bardzo jaki typ tej kontrolki użyć, czy to ma być <TextBox> czy <TextBlock>. Ja bym obstawiał <TextBox>, jednak jest to jakieś moje coś, co mi się urypało. Moja kontrolka wygląda więc w następujący sposób, "na czysto":

<TextBox Name="TxtBlock_sciezkaWejscia" IsEnabled="False" VerticalAlignment="Center" HorizontalAlignment="Stretch" Margin="5, 0, 5, 0" />

Mam pewną zmienną, która przechowuje mi tę ścieżkę, nie jest ona nazwana jakoś wybitnie trudno, pełne odwołanie do tej zmiennej to:

sciezkaPliku

z tym że to jest lista, zresztą ten fragment kodu (o ile poprawnie napisany, ale wszystko bangla, wiec powinno) wygląda tak:

public static string[] LadowanieWszystkichPlikow(string formatPliku)
        {
            sciezkaPliku = new List<string>();
            using (var dialog = new FolderBrowserDialog())
            {
                DialogResult result = dialog.ShowDialog();

                if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(dialog.SelectedPath))
                {
                    SciezkaGlowna = dialog.SelectedPath;
                    SzukanieFolderowIPlikow(new string[1] { dialog.SelectedPath }, formatPliku);
                }
            }
            return sciezkaPliku.ToArray();
        }

Idąc za ciosem - potrzebuję pierwszą wczytaną ścieżkę przetransportować jakoś do mojego TextBoxa/TextBlocka. Jeden z użytkowników forum poradził mi, abym zastosował taki zabieg:

<textbox text="{Binding MyPropertyIWantToBind}"> <textbox.datacontext> <datatobind /> </textbox.datacontext> </textbox> W DataToBind mam oczywiście właściwość public string MyPropertyiWantToBing{get; set;}

Tym samym mógłbym to napisać, ale w DataToBind miałbym umieścić coś takiego? Chyba trochę bez sensu:

sciezkaPliku{get; set;}

Tyle, ze ja nie chcę bindować "Property", tylko zmienną. Znalazłem w internecie też takie rozwiązanie - http://www.altcontroldelete.pl/artykuly/wpf-tutorial-bindowanie/ - jednak w momencie chęci dodania do listy, w sensie kiedy chcę dodać do listy wartość "sciezkaPliku" to sie nie da. Pomysly, rady?

1

Ja bym użył TextBlock, jeśli chcesz jedynie wyświetlić tę ścieżkę. Ten inny użytkownik forum napisał CI dobrze. Musisz mieć gdzieś uwtorzoną własność w Modelu Widoku (jeśli używasz MVVM) lub w Modelu albo Code Behind.

private string filePathProperty ;
    public string FilePathProperty 
    { 
         get { return filePathProperty ; }
         set { FilePathProperty =  value; OnPropertyChanged("FilePathProperty "); }
    }

Musisz zadbać w Twoim przykładzie o to, żeby

FilePathProperty  = openFileDialog.FileName;

W XAML musisz zbindować własność TextBloku

text="{Binding FilePathProperty }"

Pamiętaj o tym, żeby własność FilePathProperty była w kontekście widoku w którym jest TextBlok

EDIT: klasa w której jest FilePathProperty musi dziedziczyć z ```
INotifyPropertyChanged


EDIT2: tutaj masz coś podobnego: https://stackoverflow.com/questions/29560171/how-do-i-properly-bind-textbox-text-with-viewmodel-property

1 użytkowników online, w tym zalogowanych: 0, gości: 1