我正在尝试从组合框中获取所选项目,并将其值发送到我的ViewModel。如果我将绑定对象转换为组合框,然后在ViewModel中检索标签,则该方法有效,这似乎不是最好的方法,因为我也想将其双向绑定。
这是视图中我的组合框
<ComboBox Name="Grade">
<ComboBoxItem Tag="White">
<Image Source="/Assets/Belts/White.png"/>
</ComboBoxItem>
<ComboBoxItem Tag="White_1">
<Image Source="/Assets/Belts/White_1.png"/>
</ComboBoxItem>
</ComboBox>
这是我的代码,用于使用reactUI进行绑定
this.Bind(this.ViewModel,
x => x.SelectedGrade,
x => (ComboBoxItem) x.Grado.SelectedItem)
.DisposeWith(disposable);
这很好,但只有一种方法。
问题是如何检索组合框的标签?
我已经尝试过
this.Bind(this.ViewModel,
x => x.SelectedGrade,
x => x.Grado.SelectedItem.Tag)
.DisposeWith(disposable);
,还使用.ToString(),还尝试了selectedValue,但似乎没有任何效果。
答案 0 :(得分:1)
您需要将Grado.ItemSource
绑定到用于存放数据的收藏集,否则将无法选择任何项目。
this.OneWayBind(ViewModel, vm => vm.Grades, view => view.Grado.ItemSource)
答案 1 :(得分:0)
理想情况下,您应该从标签模型转向MVVM
SelectedItem始终为null,因为您没有使用ItemSource。使用ComboBoxItem是一个不好的做法。您可以将成绩抽象成一个类,然后绑定到ItemSource。那么您的SelectedItem属性就不会为空
public class Grade
{
public string ImageName { get; set; }
public BitmapSource ImageSource => BitmapImage(new Uri($"pack://application:,,,/AssemblyName;component/{ImageName}"));
}
现在在您看来
this.Bind(this, vm => vm.SelectedItem, view => view.combo.SelectedItem);
this.OneWayBindBind(this, vm => vm.Grades, view => view.combo.ItemsSource);