Multibinding TextBox не обновляется с помощью Combobox SelectedItem

Я пытаюсь создать текстовый предварительный просмотр пути к файлу, используя MultiBinding в TextBlock, но у меня возникла проблема. Что я хотел бы сделать, так это установить некоторые значения в некоторых элементах пользовательского интерфейса (одно поле со списком и одно текстовое поле) и увидеть, как предварительный просмотр заполняется в нижней части окна.
XAML предварительного просмотра

    <Label Grid.Row="3" Grid.Column="0" Content="Preview:"/>
    <TextBlock>
        <TextBlock.Text>
            <MultiBinding StringFormat="P:\{0}\{1}\file.txt">
                <Binding Path="SelectedStudio.Code"/>
                <Binding Path="SelectedProject.ProjectCode"/>
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>

SelectedStudio и SelectedProject — это свойства в ViewModel
ViewModel.

    public ObservableCollection<WbStudio> Studios { get; set; }

    public static WbStudio SelectedStudio { get; set; }

    public static WbProject SelectedProject { get; set; }

Объекты

public class WbProject
{
    public string ProjectName { get; set; }
    public string ProjectCode { get; set; }
    public string ClientName { get; set; }
    public string Address { get; set; }
}

и

public class WbStudio
{
    public string Name { get; set; }
    public string Code { get; set; }
}

Свойства ViewModel привязаны к другому разделу пользовательского интерфейса в верхней части окна
Setup XAML

    <Label Content="Project Studio:"/>
    <ComboBox ItemsSource="{Binding Studios, Mode=OneTime}" DisplayMemberPath="Code" SelectedValuePath="Code"
              SelectedItem="{Binding SelectedStudio, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

    <Label Content="Project Code:"/>
    <TextBox Text="{Binding SelectedProject.ProjectCode}"/>

Вот проблема:
Второй элемент Binding в Multibinding (<Binding Path="SelectedProject.ProjectCode"/>) будет обновляться и отображаться в текстовом блоке предварительного просмотра, как только текстовое поле выше потеряет фокус (идеально!), в то время как первый элемент Binding (<Binding Path="SelectedStudio.Code"/>) никогда не отображается в TextBlock предварительного просмотра, когда я выбираю элемент из ComboBox.

Что мне не хватает и как это исправить?
Я думал, что это вопрос реализации OnPropertyChanged(string info) для свойств WbStudio, но это не сработало, и WbProject тоже не реализовано, поэтому я подумал, что это не должно быть проблемой. Я также подумал, что это может быть связано со свойствами static, но они оба статичны, и SelectedProject работает. И вы не реализуете методы OnPropertyChanged для статических свойств таким же образом. Так что я подозреваю, что это связано с некоторой разницей между Combobox и TextBox?


person Andrea Tassera    schedule 26.11.2020    source источник
comment
Я не знаю, как выглядит ваша коллекция, но я думаю, что SelectedValuePath=Code неверен. Это означает, что вещь, которую вы хотите установить для связанного объекта, является свойством кода. позже в Multibinding вы ожидаете существования SelectedStudio.Code. Избавьтесь от этого SelectedValuePath - может быть, это сработает.   -  person Prateek Shrivastava    schedule 26.11.2020
comment
Я только что попытался избавиться от него, но все еще не работает! Коллекция представляет собой просто набор этих WbStudio объектов (код в сообщении), но дайте мне знать, если вам нужна дополнительная информация.   -  person Andrea Tassera    schedule 26.11.2020
comment
ViewModel должен реализовать интерфейс INotifyPropertyChanged и запустить событие PropertyChanged для своих свойств, особенно для SelectedStudio. Обратите внимание, что установка Mode=TwoWay и UpdateSourceTrigger=PropertyChanged в привязке SelectedItem не имеет смысла. Оба установлены по умолчанию.   -  person Clemens    schedule 26.11.2020
comment
Для тех, кто когда-либо закрывал этот вопрос, опубликованная тема не отвечает на мой вопрос. Как я уже сказал в исходном сообщении, я пытался использовать INotifyPropertyChanged, но это не сработало. ТАКЖЕ, SelectedStudio является статическим свойством, поэтому вы не реализуете OnPropertyChanged таким же образом. Пожалуйста, откройте вопрос заново!   -  person Andrea Tassera    schedule 26.11.2020
comment
Я пробовал с INotifyPropertyChanged, и это не сработало никоим образом не является достаточным описанием проблемы. Вы должны реализовать этот интерфейс для нестатических свойств и запускать событие StaticPropertyChanged для статических свойств. Если это не сработает, покажите нам, что вы сделали. Кроме того, свойства в модели представления никогда не должны быть статичными.   -  person Clemens    schedule 26.11.2020
comment
Спасибо за ваш ответ @Clemens! Я не подумал вставлять код для OnStaticPropertyChanged, так как он не работал, и я думаю, что проблема не в этом, поэтому я решил избежать путаницы. Но я взял код из двух последних ответов в этом другом посте inotifypropertychanged">stackoverflow.com/questions/4680244/. В любом случае, свойство SelectedProject также является статическим, но оно работает при заполнении элемента ‹Binding...›, поэтому я подумал, что дело не в этом.   -  person Andrea Tassera    schedule 26.11.2020
comment
Path="SelectedStudio.Code" недопустимо для статического свойства. Посмотрите последний связанный исходный вопрос и выполните поиск в StackOverflow. Должно быть что-то вроде Path="(local:ViewModel.SelectedStudio).Code". Однако эти свойства не должны быть в первую очередь статичными.   -  person Clemens    schedule 26.11.2020
comment
@Clemens Я попробовал это сейчас и все еще не работает. Опять же, SelectedProject связан с использованием <Binding Path="SelectedProject.ProjectCode"/>, и это работает! Вот почему я подумал, что это может быть разница между ComboBox и TextBox. Можно ли снова открыть вопрос? Может кто готов помочь...   -  person Andrea Tassera    schedule 27.11.2020
comment
Лучше напишите новый вопрос со всеми соответствующими подробностями, но не более того. Покажите нам только то, что не работает, но покажите все детали вашей реализации. Также укажите причину, по которой эти свойства являются статическими. См. также stackoverflow.com/help/minimal-reproducible-example.   -  person Clemens    schedule 27.11.2020