내가 가지고있는 뷰 모델은 MyEnum
는 사용자가 입력 MyEnum?
,이다 속성 ProcessOption
를 보유하고이양방향
<DataTemplate DataType="{x:Type ViewModels:ViewModel}">
<Views:View />
</DataTemplate>
같은 DataTemplate을 사용하여 내 뷰 모델에 연결된보기, 열거 형은 3 가지 값인 Single
, Multiple
및 All
을 말합니다. 나는이 속성에 콤보 상자를 결합하려고, 그래서 나는 다음과 같은 오전 방법은 다음과 같습니다
뷰 모델은
public List<string> Options
{
get
{
return Enum.GetNames(typeof(MyEnum)).ToList();
}
}
이있는 나는 Combobox
의 ItemsSource
속성을 결합하는 것입니다 List<string>
의 속성이 있습니다. 그런 다음 ProcessOption
속성 외에도 ViewModel에는 OptionName
속성 (string
)이 있습니다.이 옵션은 선택한 옵션의 이름을 유지하기위한 것입니다. ViewModel은 INotifyPropertyChanged
을 구현하고 두 속성은 해당 설정자에서 PropertyChanged
이벤트를 발생시킵니다. 내가 사용하고있는 바인딩은 다음과 같습니다.
<ComboBox ItemsSource="{Binding Options}"
SelectedItem="{Binding OptionName}"
SelectedValue="{Binding ProcessOption}"/>
이 시점까지는 제대로 작동합니다. 처음에는 콤보 상자가 비어 있으며 두 속성 모두 null
이고 사용자가 옵션을 선택하면이 속성이 ViewModel에 전파됩니다.
데이터베이스에서 데이터를로드 할 때 문제가 발생하고 초기 값으로 컨트롤을로드하려고합니다. 이 경우, 뷰 모델의 생성자에서 나는이 있습니다
this.ProcessOption = objectFromDB.ProcessOption // this is the value restored from DB, let's say it is MyEnum.Multiple
this.OptionName = Options.First(x => x.Equals(Enum.GetName(typeof(MyEnum), objectFromDB.ProcessOption)));
문제는 그들이 나중에 Combobox
바인딩에서 널 (null)로 설정되어, 위에서 올바른 값으로이 속성을 설정하지만,이므로, 초기 값 지키지 않는다. 나는 또한 Combobox
여전히 올바른 옵션을 표시하지 않습니다, 그것은 비어 있지만, 어떤 경우에는보기로드 후 올바른 값을 가지고 속성 '설정자에서 if (value == null) { return; }
같은 것을 시도했다.
나는 또한 IsSynchronisedWithCurrentItem
설정을 시도 했음에 유의해야하며, 콤보 상자가 비어있는 대신 첫 번째 요소가 표시된다는 점을 제외하고는 아무런 차이가 없습니다.
누구나이 바인딩을 도울 수 있습니까? 어떤 도움이라도 대단히 감사 할 것입니다, 이것은 나를 미치게합니다!
콤보 박스의 SelectedItem 또는 SelectedValue 속성에만 바인딩하려고 했습니까? 네 문제가 그 방향으로있을 수 있다고 생각해. –
와우, 그랬어. SelectedItem 작품에만 바인딩하는 것을 시도하지 않았다는 것을 믿을 수 없다. 그리고 바인딩 된 것에서 다른 속성을 얻을 수있다. 감사!! –