[英]Getting Value From Combo Box MVVM WPF c#
我正在嘗試獲取MVVM中ComboBox的值,並將其傳遞給我的ViewModel。
我的xaml組合框是..
<ComboBox
DataContext="{StaticResource WorkorderGroups}"
Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2"
Height="20"
ItemsSource="{Binding Path=AllC}"
SelectedItem="{Binding Path=SelectedC, Mode=TwoWay}"
/>
然后在WorkorderView中設置所選項目
public List<long?> AllC
{
get
{
return _workorderRepository.GetCustomersID();
}
set
{
if (value == _workorderRepository.GetCustomersID())
return;
value = _workorderRepository.GetCustomersID();
base.OnPropertyChanged("AllC");
}
}
public string SelectedC
{
get
{
return item;
}
set
{
item = value;
OnPropertyChanged("SelectedC");
}
}
然后在按鈕上單擊我試圖在AllWorkorderViewModel中訪問它,我正在使用以下代碼...
public ICommand Test
{
get
{
if (_test == null)
{
_test = new RelayCommand(
param => this.Testy()
);
}
return _test;
}
}
public void Testy()
{
List<string> s = this.AllWorkorders.Select(C => C.SelectedC).ToList();
string s1 = s[0];
}
請忽略方法名稱,這只是草稿代碼。
我的問題是它返回的字符串不是選定的項目,它是一個包含200多個項目的列表,它們全為空。 有誰知道為什么?
謝謝。
這行我聽不懂:
List<string> s = this.AllWorkorders.Select(C => C.SelectedC).ToList();
什么是AllWorkorders
? 如果您要當前選擇的項目,則它本身就是SelectedC
。 如果要從其他列表中查找項目,則必須執行var item = AllWorkorders.FirstOrDefault(x => x.YourMatchingProperty == SelectedC)
我不確定您是否了解Select的功能-我覺得您想使用Where / First或Single運算符:檢查以下Linq示例: https : //code.msdn.microsoft.com/101-LINQ-Samples -3fb9811b
您的ViewModel對我來說不太正確。 在這里,您有一個使用MVVM的工作示例:
MainWindow XAML:
<Grid>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<ComboBox Width="100" Height="20" ItemsSource="{Binding AllC}" SelectedItem="{Binding SelectedC, Mode=TwoWay}" Margin="20"/>
<Button Width="100" Height="20" Margin="20" Command="{Binding GetValueCombobox}"></Button>
</StackPanel>
</Grid>
MainWindow.cs:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new MainViewModel();
}
}
MainWindowViewModel:
public class MainViewModel : INotifyPropertyChanged
{
private readonly List<long?> _workorderRepositoryList = new List<long?>() {1, 2, 5, 3, 4};
public List<long?> AllC
{
get { return _workorderRepositoryList; }
set
{
if (value == _workorderRepositoryList)
return;
value = _workorderRepositoryList;
OnPropertyChanged("AllC");
}
}
private string item;
public string SelectedC
{
get { return item; }
set
{
item = value;
OnPropertyChanged("SelectedC");
}
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
public ICommand EvaluateStateCommand
{
get
{
return new RelayCommand(parameter =>
{
var myItem = SelectedC;
//your selected item (the value of the combo) is represented by SelectedC
});
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.